如何让本地ActiveMQ代理“镜像”远程ActiveMQ代理上的队列?

时间:2010-02-01 12:55:46

标签: java jms activemq

我有一个本地ActiveMQ代理,它在一个不可靠的互联网连接上,还有一个可靠数据中心的远程ActiveMQ代理。我已经整理出“存储转发”设置,以便在Internet连接可用时将传出消息发送到远程代理。仅此一点很有效,但是当消息出站时。

然而,现在我必须做相反的事情。这是场景:

  1. 远程 ActiveMQ代理中会显示一条新消息。消息将放入特定队列。
  2. 几分钟后,本地 ActiveMQ代理就可以使用Internet连接。
  3. 本地代理应该能够从远程代理中提取消息,并将其放在自己的本地队列中。
  4. 本地消费者将能够看到该消息。
  5. 所以从本质上讲,我需要本地代理成为远程队列的订阅消费者。我查看了ActiveMQ文档但我在.xml配置文件中找不到任何关于如何执行此操作的内容。

    这是我应该寻找的吗?请参阅:"ActiveMQ: JMS to JMS Bridge"

    任何建议和提示都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

使用activemq经纪人网络,您可以轻松地进行存储和转发。 (http://activemq.apache.org/networks-of-brokers.html

如果你想从本地到远程,默认有效,如果你想远程与本地对话,你应该:

A)从远程到本地代理建立连接的方式与从本地到远程的连接方式相同(使用故障转移传输,以便经纪人在丢失和恢复连接后重新连接。我们一直这样做,它可以正常工作大)

B)建立从本地到远程双工的连接(请查看上面链接中的双工uri参数)。

duplex false如果为true,则网络连接将用于生成AND Consume消息。当集线器位于防火墙后面时,这对于中心和辐射场景非常有用

示例:

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

答案 1 :(得分:1)

我使用JMS到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