我遇到以下问题:我有几个站点与本地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配置中的某些内容吗?
谢谢!
答案 0 :(得分:0)
您正在使用TOPIC,即被击中或未命中。这意味着在连接断开时发送消息将丢失,这是主题的标准行为(只有在发送消息时订阅的订阅者才会收到消息)。 (http://activemq.apache.org/how-does-a-queue-compare-to-a-topic.html)
如果您希望远程消费者接收消息,您应该使用队列;或者应该将您的订户设置为持久订阅者,以确保他们将始终收到消息。(http://activemq.apache.org/how-做耐久队列和 - 主题-work.html)