Постановка задачи: Есть две очереди в двух разных брокерах. Каждая очередь имеет одного потребителя. Производитель сбрасывает сообщения в первую очередь. Мы хотели бы отправить копию сообщения во вторую очередь. Для визуализации
Производитель
|
Брокер1 -> Очередь1 -> Потребитель1
| (копия)
Broker2 -> Queue2 -> Consumer2 (принимает то же сообщение, что и Consumer1, но не зависит от Consumer1)
Вопрос
Что я сделал до сих пор: Мне удалось сделать это с 4 очередями. В Broker1 Queue1 пересылает копию в виртуальную очередь назначения. Кроме того, отправка сообщений в виртуальном месте назначения брокеру 2 через сетевой соединитель.
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name = "Queue1" forwardOnly = "false">
<forwardTo>
<queue physicalName = "IntermediateQueue"/>
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
<networkConnectors>
<networkConnector
name = "Q:broker1->broker2"
uri = "static:(tcp://localhost:31616)"
duplex = "false"
staticBridge = "true">
<staticallyIncludedDestinations>
<queue physicalName = "IntermediateQueue"/>
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
В Broker2 - пересылка всех сообщений, полученных в промежуточной очереди, в фактическую целевую очередь.
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name = "IntermediateQueue">
<forwardTo>
<queue physicalName = "FinalDestinationQueue" />
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
Благодарим за любую помощь, поскольку просмотр документации и форумов по activemq не дал оптимизированного ответа на эту проблему.





По сути, вы воссоздаете pub + sub, а затем добавляете шаблон очереди передачи для интеграции с несколькими брокерами. Для этого существуют допустимые варианты использования, и ваш подход действителен и соответствует предполагаемому дизайну составных пунктов назначения и сетевых соединителей. Компромиссом при таком подходе является необходимость сложного администрирования и управления конфигурацией.
Насколько я понимаю, вы предпочитаете не использовать темы. Однако вы можете рассмотреть возможность использования Virtual Topics1, которая элегантно решает эту проблему и позволяет динамически добавлять новых потребителей без изменения конфигурации брокера.
Производитель отправить в тему:
topic://VT.ORDER.EVENT
Потребители читают из специальных именованных очередей
clientA: queue://VQ.CLIENTA.VT.ORDER.EVENT
clientB: queue://VQ.CLIENTB.VT.ORDER.EVENT
ссылка: Виртуальные темы