2012-04-04 65 views
1

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

谢谢。

回答

1

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

+0

如果我理解正确,通配符可用于订阅一组队列,但不发送消息?看起来,复合目的地要求在发送消息时枚举所有目的地,这违背了将生产者与消费者分离的想法。 – minaev 2012-04-05 06:12:06

+0

如果您阅读复合目标上的完整页面,则会找到指向代理端配置的链接,它可以执行您想要的功能:http://activemq.apache.org/virtual-destinations.html#VirtualDestinations-CompositeDestinations。 “阅读,它的根本。” – 2012-04-05 14:02:58

+0

[惭愧,但持久]我是对的,这可能只能在服务器配置文件中启用(希望没有重新启动)? STOMP选择器是否足够(并且更灵活)?谢谢! – minaev 2012-04-06 14:15:03

1

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

您也可以应用转移过滤器,以便将消息分隔到适当的队列中。

+0

听起来不错,但我很想问同样的问题:只能在服务器端启用转接功能吗? STOMP选择器是否直接转换为过滤器? – minaev 2012-04-06 14:20:43

相关问题