我有一对使用 ActiveMQ 5.5.1 配置为代理网络的代理。每个代理都存在于通过 WAN 进行通信的服务器上。
服务器 A 上的代理 A
<amq:broker useJmx="false" persistent="false">
<amq:networkConnectors>
<amq:networkConnector uri="static:(tcp://BrokerB:61616)" duplex="true" />
</amq:networkConnectors>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://BrokerA:61616" />
</amq:transportConnectors>
</amq:broker>
服务器 B 上的代理 B
<amq:broker useJmx="false" persistent="false">
<amq:networkConnectors>
<amq:networkConnector uri="static:(tcp://BrokerA:61616)" duplex="true" />
</amq:networkConnectors>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://BrokerB:61616" />
</amq:transportConnectors>
</amq:broker>
在每台服务器上,我都有一个 Java 服务正在运行,它创建以下主题和队列:
<amq:queue id="myQueue" physicalName="myQueue" />
<amq:topic id="myTopic" physicalName="MyTopic" />
java 服务(在每个服务器上)为myQueue创建一个生产者和一个消费者,并为myTopic创建一个生产者和消费者。我希望myTopic上的两个消费者都能接收所有主题消息,它确实如此。问题在于myQueue。我只想要配置的代理消费myQueue消息。例如,如果 BrokerA 在 ServerA 上生成服务消息,我只希望 ServerB 上的 BrokerB 使用该消息。现在,在我的测试中,我看到在 ServerA 上生成的消息中约有 50% 由 BrokerA 消耗,50% 由 BrokerB 消耗。此外,如果 BrokerB 离线,BrokerA 必须同时接受来自 ServerA 和 ServerB 的所有 myQueue 消息并使用所有myQueue消息,直到 BrokerB 重新在线。
我曾考虑过使用消息组,但我想不出一个好方法来检测何时发生故障以切换消息发送到哪个组。任何建议将不胜感激!