activemq 重新连接的机制
4. ??? </transportConnectors>?
5. ??? ...?
6. </broker>?
?? 在使用Failover Transport或Discovery transport等能够自动重连的transport的时候,需要注意的是:设想有两个broker,它们都启用AMQ Message Store作为持久化存储,有一个producer和一个consumer连接到某个queue。当因其中一个broker失效时而切换到另一个 broker的时候,如果失效的broker的queue中还有未被consumer消费的消息,那么这个queue里的消息仍然滞留在失效broker 的中,直到失效的broker被修复并重新切换回这个被修复的broker后,之前被保留的消息才会被consumer消费掉。如果被处理的消息有时序限 制,那么应用程序就需要处理这个问题。另外也可以通过ActiveMQ集群来解决这个问题。
?? 在transport重连的时候,可以在connection上注册TransportListener来获得回调,例如:
Java代码?
1. (ActiveMQConnection)connection).addTransportListener(new TransportListener() {?
2. ??? public void onCommand(Object cmd) {?
3. ??? }?
4. ?
5. ??? public void onException(IOException exp) {?
6. ??? }?
7. ?
8. ??? public void transportInterupted() {?
9. ??????? // The transport has suffered an interruption from which it hopes to recover.?
10. ??? }?
11. ?
12. ??? public void transportResumed() {?
13. ??????? // The transport has resumed after an interruption.?
14. ??? }?
15. });?
---------------------
我的做法是 不要在服务器端设置,而在本地设置:failover:(tcp://192.168.0.245:61616?wireFormat.maxInactivityDuration=0)