是否可以使用STOMP将消息发送到多个队列?

时间:2012-04-04 10:47:51

标签: message-queue activemq hornetq stomp

我正在寻找PHP项目中的RabbitMQ替代品。到目前为止我考虑的两个选项是Kestrel和Qpid(如果我们决定坚持使用AMQP(我想避免))。在RabbitMQ中,您可以向交换(目标)发送消息,该消息决定应将消息传递到哪些队列或主题(以JMS术语)。阻止我选择STOMP服务器(ActiveMQ / Apollo或HornetQ)的原因是我无法确定STOMP是否有可能向目的地发送消息以便将消息传递到多个队列(在JMS中)项)?发件人不应该知道邮件应该传递到哪个队列。

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以在ActiveMQ中使用名为Composite Destinations的东西来使用Stomp或标准JMS客户端执行此操作。 Stomp目标以/ queue / string为前缀,然后是目标名称。您还可以在ActiveMQ中使用Virtual Destinations。当然,ActiveMQ中的Destination字符串可以支持wildcards

答案 1 :(得分:1)

在HornetQ中,您可以使用Diverts(独占和非独占)。 STOMP消息将到达原始队列,但随后将被透明地转移到hornetq-configuration.xml中配置的相应队列。

您还可以应用带有转移的过滤器,以便将邮件分隔到适当的队列中。

答案 2 :(得分:0)

自己面对同样的问题,并使用ActiveMQ XML中的以下配置解决。

<destinationInterceptors>
 <virtualDestinationInterceptor> 
  <virtualDestinations> 
   <compositeQueue name="MY.QUEUE">
    <forwardTo>
     <queue physicalName="FOO" /> 
     <queue physicalName="BAR" />
    </forwardTo>
   </compositeQueue>
  </virtualDestinations>
 </virtualDestinationInterceptor>
</destinationInterceptors> 

参考http://activemq.apache.org/virtual-destinations.html