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