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

Reply via email to