2011-11-29 115 views
1

我所看到的例子似乎支持了幾個用例:JMS API是否支持異步雙向消息傳遞?

  1. 點對點 - 單出版商單個消費者,單向通信從出版商到消費者
  2. 發佈/訂閱 - 出版商多個消費者,單向通信從出版商到消費者
  3. 請求/響應 - 單出版商單個消費者,雙向通信,但阻止

我在尋找什麼是雙向異步消息。例如我想要做以下操作:

Publisher: "Hello world" to consumer 
Consumer: Process "Hello world" 

Wait 5 minutes 

Consumer: "Hello publisher" to publisher 
Publisher: Process "Hello publisher" 

API是否支持上述用例?或者我需要將所有內容同時作爲發佈者和消費者來實現?

回答

0

我自己沒有嘗試過,但使用JMSReplyTo的實現可能是一種解決方法。

檢查從ActiveMQ的

+0

在這種情況下它會使用相同的隊列嗎?我認爲JMS隊列是單向的... –

0

JMS這個How should I implement request response with JMS?文檔沒有爲您的要求的任何API。您可以使用點對點消息傳遞來實現您的需求。

出版商「Hello World」 - > Q1 - >消費者流程「Hello World」。

等待5秒鐘

消費者說的 「Hello World」 - > Q1 - >發佈流程的 「Hello World」

1

最有可能的最好的辦法是使用2個隊列。每一側的同一個對象可以是一個隊列中的生產者,另一個是消費者。那麼你有:

Object1 "Hello world" -> queueDirection1 -> Object2 processes "hello world" 
Object2 "Hello world" -> queueDirection2 -> Object1 processes "hello world" 

這現在是完全異步,隊列之間沒有時間要求。

我認爲任何具有單個隊列或單個主題的配置都會帶來不希望的阻塞或自動接收消息的風險。如果消息速率增加或處理時間增加,請務必考慮系統的行爲。

0

您可以使用Apache Camel http://camel.apache.org/並使用JMS組件以In/InOut方式發送消息。如果您使用inOut方式,駱駝會創建一個臨時隊列來爲每個請求發回答案。它也爲不同的消息處理和消息內容的豐富提供了很多可能性。

+0

駱駝如何運作這種雙向的方式? – user1484819

+0

駱駝創建一個臨時隊列來發回答案。超時時間如果未收到答案,Camel將拋出RequestTimeoutException。 – Denys