Как заставить локального посредника ActiveMQ «зеркалировать» очередь на удаленном посреднике ActiveMQ? - PullRequest
2 голосов
/ 01 февраля 2010

У меня есть локальный брокер ActiveMQ с ненадежным подключением к Интернету, а также удаленный брокер ActiveMQ в надежном центре обработки данных. Я уже разобрался с настройкой «сохранить и переслать», чтобы исходящие сообщения отправлялись удаленному посреднику при наличии подключения к Интернету. Это само по себе прекрасно работает, но когда сообщения исходящие.

Однако теперь я должен сделать обратное. Вот сценарий:

  1. Новое сообщение появляется в удаленном Брокере ActiveMQ. Сообщение помещается в определенную очередь.
  2. Через несколько минут подключение к Интернету станет доступным для локального ActiveMQ-брокера.
  3. Локальный брокер затем сможет получить сообщение от удаленного брокера и поместить его в свою локальную очередь.
  4. Локальные потребители смогут увидеть сообщение.

По сути, мне нужно, чтобы локальный брокер стал подписанным потребителем для удаленной очереди. Я просмотрел документацию ActiveMQ, но пока не могу найти ничего о том, как это сделать, в файле конфигурации .xml.

Это то, что я должен искать? См .: «ActiveMQ: мост JMS-JMS» .

Любые советы и рекомендации будут высоко оценены.

Ответы [ 2 ]

3 голосов
/ 28 марта 2010

С сетью брокеров activemq вы можете легко сделать магазин и вперед. (http://activemq.apache.org/networks-of-brokers.html)

Если вы хотите от локального к удаленному, по умолчанию работает, если вы хотите, чтобы удаленный говорил с локальным, вы должны либо:

A) Выполните подключение от удаленного к локальному посреднику так же, как вы делали это с локального на удаленный (используйте отказоустойчивый транспорт, чтобы посредники восстанавливали соединение после потери и восстановления соединения. Мы делаем это все время, и это работает большой)

B) Установите соединение, которое у вас уже есть, с локального на удаленный дуплекс (посмотрите на параметр dupri uri на ссылке выше).

duplex false, если true, сетевое соединение будет использоваться как для создания, так и для потребления сообщений. Это полезно для сценариев концентратора и луча, когда концентратор находится за брандмауэром и т. Д.

Пример:

 <networkConnector name="REMOTE" uri="static://(tcp://IP_OR_REMOTE_HOST:61616)" userName="system" password="manager" duplex="true"/>
1 голос
/ 01 февраля 2010

Я заставил его работать, используя JMS to JMS Bridge. См. Соответствующую конфигурацию ниже.

Я вижу еще одну потенциальную проблему. На удаленном брокере ActiveMQ «сообщения в очереди», кажется, просто задерживаются. Я бы предпочел, чтобы они были автоматически удалены.

... snip snip
    <jmsBridgeConnectors>
        <jmsTopicConnector
          outboundTopicConnectionFactory="#remoteFactory">
          <inboundTopicBridges>
            <inboundTopicBridge inboundTopicName="jms/TestTopic1" localTopicName="jms/TestTopicResult" />
          </inboundTopicBridges>
        </jmsTopicConnector>
    </jmsBridgeConnectors>

</broker>
<bean id="remoteFactory"
    class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://x.x.x.x:61616" />
</bean>
... snip snip
...