在ActiveMQ中,是否有方法将消息副本从一个队列发送到远程代理中的另一个队列?

在ActiveMQ中,是否有方法将消息副本从一个队列发送到远程代理中的另一个队列?,activemq,Activemq,问题陈述:在两个不同的代理中有两个队列。每个队列都有一个使用者。生产者正在第一个队列上丢弃消息。我们希望将消息的副本发送到第二个队列。用于可视化 制作人 | Broker1-->队列1-->使用者1 |(副本) Broker2-->Queue2-->Consumer2(使用与Consumer1相同的消息,但独立于Consumer1) 问题是 每个代理中仅创建1个队列。我已经通过4个队列实现了上述目标,但正在寻找更优化的解决方案 不希望使用任何主题 只能通过activemq提供的配置完成 到目前为

问题陈述:在两个不同的代理中有两个队列。每个队列都有一个使用者。生产者正在第一个队列上丢弃消息。我们希望将消息的副本发送到第二个队列。用于可视化

制作人
|

Broker1-->队列1-->使用者1
|(副本)
Broker2-->Queue2-->Consumer2(使用与Consumer1相同的消息,但独立于Consumer1)

问题是

  • 每个代理中仅创建1个队列。我已经通过4个队列实现了上述目标,但正在寻找更优化的解决方案
  • 不希望使用任何主题
  • 只能通过activemq提供的配置完成
  • 到目前为止我做了什么: 我用4个队列完成了上述操作。 在Broker1中,队列1将副本转发到虚拟目标队列。另外,通过网络连接器将虚拟目的地中的消息发送到broker 2

        <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如何根据不同消费应用程序的标识符分隔队列。虚拟主题可以根据需要跨网络连接器分发。