Есть ли в ActiveMQ способ отправить копию сообщения из одной очереди в другую очередь удаленного брокера?

Постановка задачи: Есть две очереди в двух разных брокерах. Каждая очередь имеет одного потребителя. Производитель сбрасывает сообщения в первую очередь. Мы хотели бы отправить копию сообщения во вторую очередь. Для визуализации

Производитель
|

Брокер1 -> Очередь1 -> Потребитель1
| (копия)
Broker2 -> Queue2 -> Consumer2 (принимает то же сообщение, что и Consumer1, но не зависит от Consumer1)

Вопрос

  1. В каждом брокере создается только 1 очередь. Я достиг вышеуказанного с помощью 4 очередей, но ищу более оптимизированное решение.
  2. Предпочитаю, чтобы темы не использовались.
  3. Выполняется только через конфигурацию, предоставленную activemq.

Что я сделал до сих пор: Мне удалось сделать это с 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 не дал оптимизированного ответа на эту проблему.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
14
1

Ответы 1

По сути, вы воссоздаете pub + sub, а затем добавляете шаблон очереди передачи для интеграции с несколькими брокерами. Для этого существуют допустимые варианты использования, и ваш подход действителен и соответствует предполагаемому дизайну составных пунктов назначения и сетевых соединителей. Компромиссом при таком подходе является необходимость сложного администрирования и управления конфигурацией.

Насколько я понимаю, вы предпочитаете не использовать темы. Однако вы можете рассмотреть возможность использования Virtual Topics1, которая элегантно решает эту проблему и позволяет динамически добавлять новых потребителей без изменения конфигурации брокера.

Производитель отправить в тему:

topic://VT.ORDER.EVENT

Потребители читают из специальных именованных очередей

clientA: queue://VQ.CLIENTA.VT.ORDER.EVENT

clientB: queue://VQ.CLIENTB.VT.ORDER.EVENT

ссылка: Виртуальные темы

Другие вопросы по теме