2015-02-05 86 views
0

我的問題,很快:駱駝最佳做法,消息和異常處理

我必須編寫系統,通過ServiceMix發佈什麼數據。目標端點是Web服務。這是真正的可能性,然後停止一個或多個。 業務流程需要正確的消息順序。 因爲每個系統都有一個專用隊列,所以包含這些消息。目標Web服務已由專用路由調用,其中由動態路由器定義端點。 它工作正常,如果沒有錯誤,但... 如果發佈不成功,那麼郵件登陸DLQ。 我理解它的邏輯,但我認爲這個問題不僅是我的。 我想將消息保留在原始隊列中,與消息到達的位置相同。我可以停止隊列處理器路由,並且可以重新啓動它。這足以處理輸出錯誤。

我的問題,我應該如何滿足商業預期,無需手動操作? (手動意味着AcitveMQ控制檯) 所有解決方案都有興趣。 (我通過系統嘗試單獨的DLQ,無盡的交付號碼等) 如果有人知道解決方案,請與我分享。

謝謝!

FERI

回答

0

@Feri你需要使用JMS消息傳送與客戶確認,即如果你的路線成功地傳遞到Web服務,然後發送一個肯定的確認給JMS代理別人發送負。所以,消息被標記爲出隊,只有當它被成功傳遞時,否則它仍然在隊列中。瞭解更多關於JMS消息傳遞是指

  1. http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html
  2. http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
+0

你說得對!我。但必須做它的ServiceMix /駱駝環境。在這裏我找不到這樣的辦法,可以這樣做。 (駱駝是舒服的,如果你按照「駱駝順從」的路徑,但如果不是......!) – Feri 2015-02-05 14:30:20

+0

我不確定ServiceMix,但應該沒關係。您必須使用Java或Spring DSL編寫駱駝路線。關於設置確認模式,請參閱駱駝(文檔)[http://camel.apache.org/jms.html]。對於客戶端確認,您應該在消費者URI上設置選項,acknowledgementModeName爲CLIENT_ACKNOWLEDGE,並在傳遞消息後,從交換中獲取JMS消息並調用確認方法。 – 2015-02-05 14:43:43

+0

我會嘗試你的建議,但我認爲,這有點複雜。可調用的WS是「InOnly」,所以我不明白。我的問題不是WS回答處理,而是駱駝異常處理。我無法根據需要設置駱駝路線。如果在路由處理過程中發生了一些錯誤,那麼駱駝不會將消息留給原始隊列,所有事情都會將其帶到死信隊列中。 – Feri 2015-02-05 15:07:10