Actually, you should be able to set the alwaysSyncSend via the URI by adding &jms.alwaysSyncSend=true to the end of your producer's URI, so you should be able to continue using JmsTemplate.
Tim On Fri, Nov 30, 2018, 7:30 AM Tim Bain <tb...@alumni.duke.edu wrote: > You're mixing your paradigms. > > The persistenceAdapter portion of your config is all you need for a > master/slave cluster, *as long as* your activemq.data variable resolves to > the same value in both processes. (Both processes run on the same machine, > right?) If so, the second broker started will pause in its initialization > to wait for the filesystem lock to become available, and will not accept > incoming connections from clients on its OpenWire ports. If the second > broker accepts incoming connections, that's the problem, and you need to > figure out why. > > All the other broker settings you referenced (networkConnectors, TTL > settings, the difference between static and masterslave transports, etc.) > are related to networks of brokers, and should not be in use for a > master/slave cluster (unless you're networking the cluster with other > brokers, but you haven't described that), so take them out. > > For the message loss you're seeing, are you losing a few messages from > right before the failover, or are you losing *all* of the messages from > before the failover, or something else? If it's the former, you probably > need to set alwaysSyncSend=true on your producer's connection factory. I'm > not very familiar with JmsTemplate, so I'm not sure if you can set up a > custom connection factory when using it, but if not then you can use the > JMS API directly. > > Tim > > On Fri, Nov 30, 2018, 6:30 AM PedroRP <pedro.rami...@techonrails.com > wrote: > >> We have used Spring boot to develop sender and consumer apps. >> >> *SENDER:* >> >> To send messages we used and API REST that sends 5000 messages to a topic. >> If some convertAndSend fails (ActiveMQ node 1 killed) we retry it until >> the >> failover. >> >> This is my sender class: >> >> @RestController >> public class RestApiController { >> >> @Autowired >> private JmsTemplate jmsTemplate; >> >> @RequestMapping(value = "/produce") >> public String produce() { >> String result = "Done"; >> for (int i = 0; i < 5000; i++) { >> boolean repetir = true; >> while (repetir) { >> try { >> jmsTemplate.convertAndSend("TestTopic", "Message " + >> i); >> repetir = false; >> result = "Done"; >> } catch (JmsException e) { >> e.printStackTrace(); >> result = "ERROR"; >> } >> } >> } >> return result; >> } >> } >> >> This is de sender's application.properties: >> >> spring.activemq.broker-url=failover:(tcp://172.18.13.45:61616,tcp:// >> 172.18.13.45:61626)?initialReconnectDelay=1&backup=true >> spring.activemq.user=admin >> spring.activemq.password=admin >> spring.jms.pub-sub-domain=true >> server.port=8081 >> >> CONSUMER: >> >> This is my listener class: >> >> @Service >> public class ContactTransactionReceiver { >> >> @JmsListener(destination = "TestTopic") >> public void receiveMessageSendMessage(Message message) throws >> Exception >> { >> System.out.println(((TextMessage) message).getText()); >> } >> } >> >> This is the consumer's application.properties: >> >> spring.activemq.broker-url=failover:(tcp://172.18.13.45:61616,tcp:// >> 172.18.13.45:61626)?initialReconnectDelay=1&backup=true >> spring.activemq.user=admin >> spring.activemq.password=admin >> spring.jms.pub-sub-domain=true >> server.port=8082 >> >> *ACTIVEMQ NODE 1* >> >> We have included this configuration in activemq.xml for HA, that refers to >> node2: >> >> <persistenceAdapter> >> <kahaDB directory="${activemq.data}/kahadb"/> >> </persistenceAdapter> >> <networkConnectors> >> <networkConnector >> uri="static:(tcp://172.18.13.45:61616,tcp://172.18.13.45:61626)" /> >> </networkConnectors> >> We have proved too master-slave: >> >> <persistenceAdapter> >> <kahaDB directory="${activemq.data}/kahadb"/> >> </persistenceAdapter> >> <networkConnectors> >> <networkConnector >> uri="masterslave:(tcp://172.18.13.45:61616,tcp://172.18.13.45:61626)" /> >> </networkConnectors> >> >> *ACTIVEMQ NODE 2* >> >> We have included this configuration in activemq.xml for HA, that refers to >> node2: >> >> <persistenceAdapter> >> <kahaDB directory="${activemq.data}/kahadb"/> >> </persistenceAdapter> >> <networkConnectors> >> <networkConnector >> uri="static:(tcp://172.18.13.45:61626,tcp://172.18.13.45:61616)" /> >> </networkConnectors> >> >> We have proved too master-slave: >> >> <persistenceAdapter> >> <kahaDB directory="${activemq.data}/kahadb"/> >> </persistenceAdapter> >> <networkConnectors> >> <networkConnector >> uri="masterslave:(tcp://172.18.13.45:61626,tcp://172.18.13.45:61616)" /> >> </networkConnectors> >> >> We have made test with durable messages and subscriptions wit we got the >> same problem. Moreover, we also proved including networkTTL="2" >> messageTTL="2" consumerTTL="2" and alwaysSyncSend="true" in both >> networkConnectors but the same result. >> >> You can find the full code and ActiveMQ configuration files in: >> >> https://github.com/PedroRamirezTOR/ActiveMQ-HA-Sender-Consumer.git >> <https://github.com/PedroRamirezTOR/ActiveMQ-HA-Sender-Consumer.git> >> >> Thanks in advance! >> >> >> >> -- >> Sent from: >> http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html >> >