根據Apache Camel documentation,「Camel支持使用EIP模式中的保證傳送以及其他組件:...... JMS」。在Apache Camel路由保證傳送中使用JMS嗎?
我想了解這是否意味着我可以在多組件路徑中使用JMS來「保證交付」。
例如,我有一些路線,看起來像這樣:
from("rest://post:someRestRoute")
// blah blah
.to("jms:queue:someQueue");
from("jms:queue:someQueue")
// blah blah
.to("spring-ws:someAddress")
.to("someOtherRoute");
是否在多分量的路徑的中間使用JMS有什麼好處? Camel正在寫隊列和讀隊列,並且隊列在同一臺計算機和同一個JVM上運行,所以Camel只能保證交付給自己,這似乎是多餘的。
例如,
- 的消息被髮布到
someRestRoute
。 - 該消息在
someQueue
上排隊並持續存在。 - 消息立即出列。
- 該消息發送到網絡服務
someAddress
。
據我所知,就JMS代理而言,消息在成功出隊的那一刻就「交付」了;如果spring-ws:someAddress
引發異常,則無關緊要。我想這可能會有所幫助,如果駱駝在步驟2之後立即崩潰,但我希望能保證送達someAddress
。
在多組件路線中使用JMS有什麼好處嗎?在示例中它可以用於「保證交貨」到someAddress
嗎?
我很難理解爲什麼消息會留在隊列中超過幾毫秒。應用程序已經在處理消息,爲什麼將它放在隊列中以便立即再次取消它? – DavidS
嗯...讓說你需要一個保證傳遞,並在某些情況下放置消息,但沒有選擇,因爲許多requestes來了,JVM運行fullGC或壓縮,服務器重新啓動,電源關閉等等。然後,你需要一個持久性 – Vadim
另一個和更重要的情況是集羣環境。如果是direct:direct-vm:seda:它運行在一個JVM或CamelContext中的某種端點)。讓JMS處於中間可以處理任何數量的其他服務器中的消息。 – Vadim