Как заставить локального брокера ActiveMQ отразить очередь на удаленном брокере ActiveMQ?

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

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

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

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

Это то, что я должен искать? См.: "ActiveMQ: переход от JMS к JMS".

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


person Torbjørn Kristoffersen    schedule 01.02.2010    source источник


Ответы (2)


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

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

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

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

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

Пример:

 <networkConnector name="REMOTE" uri="static://(tcp://IP_OR_REMOTE_HOST:61616)" userName="system" password="manager" duplex="true"/>
person Noctris    schedule 28.03.2010

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

Однако я вижу еще одну потенциальную проблему. На удаленном брокере 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
person Torbjørn Kristoffersen    schedule 01.02.2010
comment
Еще раз прокомментирую: панель управления ActiveMQ на удаленном брокере говорит: 4 сообщения поставлены в очередь. 8 сообщений удалены из очереди. Я предполагаю, что это кажется нормальным в конце концов. Я волновался, что память будет заполнена сообщениями, но, похоже, на самом деле они удаляются из очереди. - person Torbjørn Kristoffersen; 01.02.2010