在ActiveMQ中,是否有方法将消息副本从一个队列发送到远程代理中的另一个队列?
问题陈述:在两个不同的代理中有两个队列。每个队列都有一个使用者。生产者正在第一个队列上丢弃消息。我们希望将消息的副本发送到第二个队列。用于可视化 制作人在ActiveMQ中,是否有方法将消息副本从一个队列发送到远程代理中的另一个队列?,activemq,Activemq,问题陈述:在两个不同的代理中有两个队列。每个队列都有一个使用者。生产者正在第一个队列上丢弃消息。我们希望将消息的副本发送到第二个队列。用于可视化 制作人 | Broker1-->队列1-->使用者1 |(副本) Broker2-->Queue2-->Consumer2(使用与Consumer1相同的消息,但独立于Consumer1) 问题是 每个代理中仅创建1个队列。我已经通过4个队列实现了上述目标,但正在寻找更优化的解决方案 不希望使用任何主题 只能通过activemq提供的配置完成 到目前为
| Broker1-->队列1-->使用者1
|(副本)
Broker2-->Queue2-->Consumer2(使用与Consumer1相同的消息,但独立于Consumer1) 问题是
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name="Queue1" forwardOnly="false">
<forwardTo>
<queue physicalName="IntermediateQueue"/>
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
<networkConnectors>
<networkConnector
name="Q:broker1->broker2"
uri="static:(tcp://localhost:31616)"
duplex="false"
staticBridge="true">
<staticallyIncludedDestinations>
<queue physicalName="IntermediateQueue"/>
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
在Broker2中,将中间队列中接收到的所有消息转发到实际的目标队列
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeQueue name="IntermediateQueue">
<forwardTo>
<queue physicalName="FinalDestinationQueue" />
</forwardTo>
</compositeQueue>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
非常感谢您的帮助,因为浏览activemq文档和论坛并没有给出此问题的最佳答案。您实际上是在重新创建pub+sub,然后添加传输队列模式以进行多代理集成。有有效的用例可以做到这一点,并且您的方法是有效的,并且在复合目的地和网络连接器的预期设计范围内。这种方法的权衡是需要大量的管理和配置管理 我知道你不喜欢使用主题。但是,您可以考虑以一种优雅的方式来查看解决这个问题的虚拟主题,并允许您动态地添加新的用户,而不必修改代理配置。 制作人发送至主题:
topic://VT.ORDER.EVENT
从特殊命名队列读取的使用者
clientA:queue://VQ.CLIENTA.VT.ORDER.EVENT
clientB:queue://VQ.CLIENTB.VT.ORDER.EVENT
参考:感谢您的反馈。我对你提到的虚拟主题方法感兴趣。然而,在阅读了文档之后,我没有找到如何在其他代理之间共享相同的内容。纠正我,如果下面不是你所暗示的。生产者-->Queue1(Broker1)-->VT.ORDER.EVENT(Broker1)-->VQ.CLIENTA.VT.ORDER.EVENT(Broker1)=消费者消费,VQ.CLIENTB.VT.ORDER.EVENT(Broker1)-->Queue2(Broker2)=消费者消费生产者--客户端发送-->VT.ORDER.EVENT(Broker1)--Broker1虚拟主题拦截器->VQ.CLIENTA.VT.ORDER.EVENT和VQ.CLIENTB.VT.ORDER.EVENT是代理1或2中的VQ.CLIENTA.VT.ORDER.EVENT和VQ.CLIENTB.VT.ORDER.EVENT吗?如果它在Broker2上,请您共享任何链接或.conf示例,以使其正常工作?同一个broker。队列名称“CLIENTA”和“CLIENTB”的第二部分是VirtualTopics如何根据不同消费应用程序的标识符分隔队列。虚拟主题可以根据需要跨网络连接器分发。