首页 > 解决方案 > ActiveMQ 集群设置错误

问题描述

我正在尝试使用静态模式设置 ActiveMQ 集群。我目前只有 2 个实例。一个是 TE5021 / 192.165.20.21,带有这个配置文件(摘录):

<beans>
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="te5021" dataDirectory="${activemq.data}" persistent="false" schedulePeriodForDestinationPurge="10000" useJmx="false">
        <networkConnectors>
            <networkConnector uri="static:(tcp://192.165.20.22:61616)" dynamicOnly="true" networkTTL="3" duplex="true" prefetchSize="1" decreaseNetworkConsumerPriority="false"/>
        </networkConnectors>

        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=154857600&amp;timeout=10000&amp;soTimeout=10000" enableStatusMonitor="true" rebalanceClusterClients="true" updateClusterClients="true" updateClusterClientsOnRemove="true"/>
        </transportConnectors>
    </broker>
</beans>

第二个是 TE5022 / 192.165.20.22 带有这个配置文件(提取):

<beans>
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="te5022" dataDirectory="${activemq.data}" persistent="false" schedulePeriodForDestinationPurge="10000" useJmx="false">
        <networkConnectors>
            <networkConnector uri="static:(tcp://192.165.20.21:61616)" dynamicOnly="true" networkTTL="3" duplex="true" prefetchSize="1" decreaseNetworkConsumerPriority="false"/>
        </networkConnectors>

        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=154857600&amp;timeout=10000&amp;soTimeout=10000" enableStatusMonitor="true" rebalanceClusterClients="true" updateClusterClients="true" updateClusterClientsOnRemove="true"/>
        </transportConnectors>
    </broker>
</beans>

在第一个上,一切似乎都按预期工作。但是在第二个中,它向我显示了这些错误:

2021-11-02 10:33:23,680 | INFO  | Establishing network connection from vm://te5022 to tcp://192.165.20.21:61616 | org.apache.activemq.network.DiscoveryNetworkConnector | ActiveMQ Task-1
2021-11-02 10:33:23,692 | WARN  | Failed to add Connection id=te5022->te5021-38812-1635845361826-27:1, clientId=NC_te5021_inbound_te5022, clientIP=vm://te5022#52 due to Broker: te5022 - Client: NC_te5021_inbound_te5022 already connected from vm://te5022#12 | org.apache.activemq.broker.TransportConnection | triggerStartAsyncNetworkBridgeCreation: remoteBroker=tcp:///192.165.20.21:61616@42870, localBroker= vm://te5022#52
2021-11-02 10:33:23,693 | INFO  | Network connection between vm://te5022#52 and tcp:///192.165.20.21:61616@42870 shutdown due to a local error: {} | org.apache.activemq.network.DemandForwardingBridgeSupport | triggerStartAsyncNetworkBridgeCreation: remoteBroker=tcp:///192.165.20.21:61616@42870, localBroker= vm://te5022#52
javax.jms.InvalidClientIDException: Broker: te5022 - Client: NC_te5021_inbound_te5022 already connected from vm://te5022#12
        at org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:265)
        at org.apache.activemq.broker.jmx.ManagedRegionBroker.addConnection(ManagedRegionBroker.java:227)
        at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:99)
        at org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:119)
        at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:99)
        at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:99)
        at org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:99)
        at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:844)
        at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
        at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:331)
        at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:200)
        at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
        at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
        at org.apache.activemq.transport.vm.VMTransport.doDispatch(VMTransport.java:165)
        at org.apache.activemq.transport.vm.VMTransport.dispatch(VMTransport.java:157)
        at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:134)
        at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68)
        at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81)
        at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86)
        at org.apache.activemq.network.DemandForwardingBridgeSupport.startLocalBridge(DemandForwardingBridgeSupport.java:510)
        at org.apache.activemq.network.DemandForwardingBridgeSupport.doStartLocalAndRemoteBridges(DemandForwardingBridgeSupport.java:462)
        at org.apache.activemq.network.DemandForwardingBridgeSupport.access$600(DemandForwardingBridgeSupport.java:113)
        at org.apache.activemq.network.DemandForwardingBridgeSupport$5.run(DemandForwardingBridgeSupport.java:372)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at java.base/java.lang.Thread.run(Thread.java:832)
2021-11-02 10:33:23,719 | INFO  | te5022 bridge to te5021 stopped | org.apache.activemq.network.DemandForwardingBridgeSupport | ActiveMQ BrokerService[te5022] Task-9
2021-11-02 10:33:25,705 | INFO  | Stopping vm://te5022#52 because Failed with SecurityException: Broker: te5022 - Client: NC_te5021_inbound_te5022 already connected from vm://te5022#12 | org.apache.activemq.broker.TransportConnection | ActiveMQ BrokerService[te5022] Task-10

我究竟做错了什么 ?

标签: activemqhigh-availability

解决方案


好的,问题来了:我确实使用 duplex = true 设置了网络连接器。

就我而言,将 duplex = false 和代理属性 networkConnectorStartAsync 设置为 true 是解决方案。


推荐阅读