2016-12-05 12 views
0

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

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

场景:

生产者把消息

create connection 
put message 
close connection 

监听器(AUTO_ACK)的queue_1 - 有很长的因为这是一个听众

retrieves the message 
puts it in queue_2 (client_ack) 
broker_1下降 - 运行定期

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

问题3210

主题。 FailoverTransport将流量重定向到broker_2。所有三个部分(Procuder,Listener和Thread)都与broker_2一起工作。 broker_1已退回。 Procuder和Thread连接到broker_1。监听器保留在broker_2上。令人惊讶的是 - 当消息在broker_1上发送给队列_1时,onMessage被调用,但是监听器将消息放置在broker_2上的queue_2上。

如何让监听者重新连接到broker_1,一旦其再次可用?还是应该让生产者和线程与broker_2一起工作?

回答

0

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

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

  1. 配置代理网络
  2. 更新您的openwire传输连接器使用 'updateClusterClients = “真正的”' 和 'rebalanceClusterClients = “真”'

裁判:http://activemq.apache.org/networks-of-brokers.html

裁判:http://activemq.apache.org/failover-transport-reference.html

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

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