ActiveMQ从本地代理转发到远程代理[连接不稳定]

时间:2010-09-24 13:24:38

标签: java-ee activemq esb

我遇到以下问题:我有几个站点与本地ActiveMQ代理转发到远程代理(在数据中心)。这种连接通常是不稳定的,并且每月几次下降几次或几小时。

因此,如果此时无法访问远程代理,则消息需要等待本地代理。

我有以下ActiveMQ配置:

    <networkConnectors>

            <networkConnector uri="static://(tcp://my-remote-broker:61616)" 
                name="myremotebroker" dynamicOnly="false"
                conduitSubscriptions="true"
                decreaseNetworkConsumerPriority="false">

                    <!-- Exclude all destinations by default -->

                    <excludedDestinations>
                            <queue physicalName=">" />
                            <topic physicalName=">" />
                    </excludedDestinations>

                    <!-- Only forward these to our connection -->

                    <staticallyIncludedDestinations>
                            <topic physicalName="MySpecialTopic"/>
                    </staticallyIncludedDestinations>
            </networkConnector>
    </networkConnectors>

这会将来自本地代理(主题为MySpecialTopic)的消息转发给远程代理。这在连接稳定时有效。

但是,我尝试暂时禁用互联网连接,以便本地代理失去与远程代理的连接。此时我发送了一条新消息,该消息已在本地经纪人上排队,但从未到达远程经纪人,即使在本地经纪人重新连接后也是如此!

我缺少ActiveMQ配置中的某些内容吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使用TOPIC,即被击中或未命中。这意味着在连接断开时发送消息将丢失,这是主题的标准行为(只有在发送消息时订阅的订阅者才会收到消息)。 (http://activemq.apache.org/how-does-a-queue-compare-to-a-topic.html)

如果您希望远程消费者接收消息,您应该使用队列;或者应该将您的订户设置为持久订阅者,以确保他们将始终收到消息。(http://activemq.apache.org/how-做耐久队列和 - 主题-work.html)