ActiveMQ群集(主从)在故障转移模式下是否提供高可用性? 我正在发布有关主题的消息,但是当我杀死活动节点并且使用者连接到另一个节点时,它将丢失几条消息。 我只需要主题模式,因为我需要具有同时使用消息的不同容器。我们对持久性消息和订阅进行了测试,但遇到了同样的问题。
如果ActiveMQ不支持此功能,是否还有其他代理可以做到这一点?
我们已经使用Spring boot开发发件人和消费者应用。
SENDER:
要发送消息,我们使用了API REST,该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 NODE 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 NODE 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
提前谢谢!
答案 0 :(得分:0)
ActiveMQ 5.x确实通过主从配置支持高可用性。有关更多详细信息,请参见the documentation。
答案 1 :(得分:0)
我在您的xml中注意到,主服务器和从服务器都在引用本地KashaDB。我相信要实现真正的HA故障转移,您需要引用共享的网络驱动器。
http://activemq.apache.org/shared-file-system-master-slave
<persistenceAdapter>
<kahaDB directory="/sharedFileSystem/sharedBrokerData"/>
</persistenceAdapter>