2016-01-21 47 views
0

我在探索ActiveMQ基於不同技術(C,Java,Ruby和Python)的異構應用程序之間的高級消息傳遞。在查看supported protocols時,我無意中瞭解了執行消息交換時混合協議的用例。我搜索了ActiveMQ文檔,但無法找到任何此類參考資料來談論這一點。使用Apache ActiveMQ混合協議

我的問題是,說 -

生產者(NewsPublisher)將發表新聞(體育,財經,世界)使用AMQP的話題(NewsTopic)。在發佈之後,這個主題將這些消息存儲在相應隊列下(體育,金融和世界隊列)。在這種情況下,訂購體育隊列的客戶機是基於JMS的,另一個客戶機訂閱金融隊列是基於Stomp的;這些客戶是否可以通過NewPublisher接收使用AMQP發佈的隊列中的可用消息?

我在前面看到一個有點相關的問題posted但是發現與原始問題無關的答案,所以認爲要仔細檢查。

回答

0

在ActiveMQ中混合協議並不是那麼困難,代理負責所有內部路由和消息從入站協議到外發位的轉換,因此您不必擔心太多。

您必須關注的是您的客戶端組合允許您使用的消息類型的常見分母。在你的問題中,你列出了三種不同的協議AMQP,OpenWire和STOMP(我猜你所指的JMS是使用OpenWire的ActiveMQ JMS客戶端)。

在這個混合STOMP是一個開始,因爲它爲message payload(文本和二進制)提供最少的選項,所以你需要從那裏開始。你的信息可以限制在這兩個領域嗎?要從JMS客戶端發送到STOMP,您可以將自己限制爲JMS TextMessage和/或JMS BytesMessage。在AMQP中,您還需要將消息負載限制爲基於文本的二進制負載(假設數據部分包含包含字節數組的二進制文件)。

ActiveMQ的STOMP協議處理程序確實提供了一些選項來從其他類型執行Message transformations,例如將MapMessage轉換爲基於JSON的字符串有效內容,但最好從簡單的方式開始。

鑑於主題的廣度有很多可以說,但這應該幫助你開始。總之,是的,你可以在不同的協議上混合使用客戶端,但在ActiveMQ中你需要對這些限制有所瞭解。