我有一个 ActiveMQ 设置,其中位于一个数据中心的源代理将到达某些主题的所有消息转发到另一个数据中心的目标代理。消费者应用程序仅使用来自目标代理的消息。(这个设置主要是为了保证两个数据中心之间消息的快速高效转发。)
转发配置如下所示:
<networkConnectors>
<networkConnector name="Q:DontForwardQueueMessages"
uri="static:(tcp://destination-broker.example.com:61616)"
duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector name="T:ForwardSampleMessages"
uri="static:(tcp://destination-broker.example.com:61616)"
duplex="false" decreaseNetworkConsumerPriority="true" networkTTL="2"
dynamicOnly="true">
<excludedDestinations>
<topic physicalName=">" />
</excludedDestinations>
<staticallyIncludedDestinations>
<topic physicalName="SampleTopic1" />
<topic physicalName="SampleTopic2" />
<topic physicalName="SampleTopic3" />
<topic physicalName="SampleTopic4" />
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
我们的应用程序需要维护消息顺序。但是,当目标代理出现故障时,我们会丢失消息。到达源代理的消息在主题中堆积,但在重新建立与目标代理的连接时不会被转发。但是,重新连接后到达的消息将照常转发。
我正在寻找一种可以配置设置的方法,以便:
- 重新连接目的地后,立即发送在源处等待的所有消息,保持正确的顺序,
- 重新连接后到达的消息在转发之前等待较旧的消息被转发。