У меня есть пара брокеров, настроенных как сеть брокеров с ActiveMQ 5.5.1. Каждый брокер существует на сервере, который обменивается данными через глобальную сеть.
Брокер 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>
BrokerB на сервере 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, я хочу, чтобы BrokerB только на ServerB использовал это сообщение. Прямо сейчас в моем тесте я вижу около 50% сообщений, созданных на ServerA, потребляемых BrokerA, и 50%, используемых BrokerB. Кроме того, если BrokerB переходит в автономный режим, BrokerA должен принимать все сообщения myQueue от ServerA и ServerB и потреблять все сообщения myQueue до тех пор, пока BrokerB не вернется в оперативный режим.
Я думал об использовании групп сообщений, но не смог найти хороший способ определить, когда произошел сбой, для переключения, в какую группу отправляется сообщение. Любые рекомендации будут с благодарностью!