2012-04-04 64 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

相關問題