activemq - ActiveMQ HA在故障转移时

ActiveMQ群集(主从)在故障转移模式下是否提供高可用性? 我正在发布有关主题的消息,但是当我杀死活动节点并且使用者连接到另一个节点时,它将丢失几条消息。 我只需要主题模式,因为我需要具有同时使用消息的不同容器。 我们对持久性消息和订阅进行了测试,但遇到了同样的问题。

如果ActiveMQ不支持此功能,是否还有其他代理可以做到这一点?

我们已经使用Spring boot开发发件人和消费者应用程序。

发信人:

为了发送消息,我们使用了API REST,它向一个主题发送了5000条消息。 如果某些convertAndSend失败(ActiveMQ节点1被杀死),我们将重试直到故障转移。

这是我的发送者类:

@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;
    }
}

这是发送方的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

消费者:

这是我的侦听器类:

@Service
public class ContactTransactionReceiver {

    @JmsListener(destination = "TestTopic")
    public void receiveMessageSendMessage(Message message) throws Exception {
        System.out.println(((TextMessage) message).getText());
    }
}

这是使用者的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节点1

我们在针对HA的activemq.xml中包含了此配置,该配置引用了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>

我们已经证明太主奴了:

    <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节点2

我们在针对HA的activemq.xml中包含了此配置,该配置引用了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>

我们已经证明太主奴了:

    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>
    <networkConnectors>
        <networkConnector uri="masterslave:(tcp://172.18.13.45:61626,tcp://172.18.13.45:61616)" />
    </networkConnectors>

您可以在以下位置找到完整的代码和ActiveMQ配置文件:

https://github.com/PedroRamirezTOR/ActiveMQ-HA-Sender-Consumer.git

提前致谢!

ActiveMQ 5.x确实通过主从配置支持高可用性。 有关更多详细信息,请参见文档

转载请注明来自askonline.tech,本文标题:activemq - ActiveMQ HA在故障转移时


 Top