ActiveMQ故障转移传输 - 生产者/消费者在不同的主机上工作

时间:2016-12-05 11:12:49

标签: connection jms activemq failover

的ConnectionURL

failover:(tcp://broker1:61616,tcp://broker2:61616)?andomize=false&jms.useAsyncSend=false&jms.dispatchAsync=false&maxReconnectAttempts=30&maxReconnectDelay=3000&jms.prefetchPolicy.queuePrefetch=1000

情景:

Producer将消息发送到queue_1

create connection
put message
close connection

监听器(auto_ack) - 具有长期连接,因为这是一个监听器

retrieves the message
puts it in queue_2 (client_ack)

定期运行的线程

create connection
retrieves everything from queue_2
processes messages
ack messages
close connection

问题 - broker_1发生故障。 FailoverTransport将流量重定向到broker_2。所有三个部分(Procuder,Listener和Thread)都与broker_2一起工作。 broker_1被带回来了。 Procuder和Thread连接到broker_1。监听器仍然在broker_2上。令人惊讶的是 - 当消息到达broker_1上的queue_1时调用onMessage,但是侦听器将消息放入broker_2的queue_2。

如果侦听器再次运行,我怎样才能指示侦听器重新连接到broker_1?或者我是否应该强制生产者和线程与broker_2一起工作?

1 个答案:

答案 0 :(得分:0)

如果经纪人联网在一起,那么只有连接不平衡才有意义。如果您的流量和连接数量适中,则不一定有问题。

ActiveMQ支持基于"最佳猜测"自动重新平衡客户端。

  1. 配置经纪人网络
  2. 更新您的openwire传输连接器以使用' updateClusterClients =" true"'和' rebalanceClusterClients =" true"'
  3. 参考:http://activemq.apache.org/networks-of-brokers.html

    参考:http://activemq.apache.org/failover-transport-reference.html

    如果您希望管理员能够手动重新平衡连接,则Media Driver Integrated Console提供了一种方法:https://mediadriver.com/software/

    披露:我负责Media Driver的产品开发。