我正在尝试从ActiveMQ迁移"经典;到ActiveMQ Artemis。
我们有一个由2个活动节点组成的集群,我们试图在不影响消费者和生产者的情况下迁移这些节点。为此,我们停止第一个节点,迁移它,启动它,并在第二个节点备份时执行同样的操作。
我们观察到消费者/生产商无法重新连接:
o.a.a.t.f.FailoverTransport||无法连接到[tcp://172.17.233.92:63616?soTimeout=30000&soWriteTimeout=30000&keepAlive=真,tcp://172.17.233.93:63616?soTimeout=30000&soWriteTimeout=30000&keepAlive=true]之后:30次尝试继续重试。
消费者/生产者可以在我们重新启动后进行连接。这是正常行为吗?
这里是ActiveMQ Artemis代理:
<connectors>
<connector name="netty-connector">tcp://172.17.233.92:63616</connector>
<connector name="server_0">tcp://172.17.233.93:63616</connector>
</connectors>
<acceptors>
<acceptor name="netty-acceptor">tcp://172.17.233.92:63616?protocols=OPENWIRE</acceptor>
<acceptor name="invm">"vm://0</acceptor>
</acceptors>
<cluster-connections>
<cluster-connection name="cluster">
<connector-ref>netty-connector</connector-ref>
<retry-interval>500</retry-interval>
<use-duplicate-detection>true</use-duplicate-detection>
<message-load-balancing>ON_DEMAND</message-load-balancing>
<max-hops>1</max-hops>
<static-connectors>
<connector-ref>server_0</connector-ref>
</static-connectors>
</cluster-connection>
</cluster-connections>
这里是ActiveMQ";经典的";配置
<!-- Transport protocol -->
<transportConnectors>
<transportConnector name="openwire"
uri="nio://172.17.233.92:63616?transport.soTimeout=15000&transport.threadName&keepAlive=true&transport.soWriteTimeout=15000&wireFormat.maxInactivityDuration=0"
enableStatusMonitor="true" rebalanceClusterClients="true" updateClusterClients="true" updateClusterClientsOnRemove="true" />
</transportConnectors>
<!-- Network of brokers setup -->
<networkConnectors>
<!-- we need conduit subscriptions for topics , but not for queue -->
<networkConnector name="NC_topic" duplex="false" conduitSubscriptions="true" networkTTL="1" uri="static:(tcp://172.17.233.92:63616,tcp://172.17.233.93:63616)" decreaseNetworkConsumerPriority="true" suppressDuplicateTopicSubscriptions="true" dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<!-- we need conduit subscriptions for topics , but not for queue -->
<networkConnector name="NC_queue" duplex="false" conduitSubscriptions="false" networkTTL="1" uri="static:(tcp://172.17.233.92:63616,tcp://172.17.233.93:63616)" decreaseNetworkConsumerPriority="true" suppressDuplicateQueueSubscriptions="true" dynamicOnly="true">
<excludedDestinations>
<topic physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors>
此问题应该是由于updateClusterClientsOnRemove
引起的,如果为true,则将在从网络中删除集群时更新客户端,请参阅故障转移的代理端选项。
当第一个节点停止时,客户端将删除它,并且不会再次添加它,因为具有ActiveMQ Classic的第二个节点无法连接到具有ActiveMQ Artemis的第一个节点。
最后,我们决定首先停止2个节点,然后升级并重新启动。从消费者/生产者的角度来看,这意味着中断,但所有订阅都在重新启动后正确完成。