2014-12-05 83 views
1

我使用JMS:消息驅動通道適配器,其中我需要處理通過多個SI部件涉及處理和最後更新數據庫或在某些情況下發送JMS消息的消息。事務消息驅動溝道適配器

我怎樣才能讓這條消息的處理完全事務,這意味着應導致任何錯誤消息回滾到JMS隊列。我看到你可以有一個事務管理器,但沒有看到任何示例如何爲這種情況配置一個。

而且,因爲我已經併發消費者設置爲較大的數字,所以我會想了解它是如何的情況下表現的回滾,會比立即可用的消息,任何其他消費,甚至相同的消費者?

自公司最有可能是另一個消費者會失敗得這麼有多少次這樣的消息將被繼續傳遞(重試),如何處理這樣的情況。

非常感謝您

回答

1

設置acknowledge="transacted"和配置適配器上的JDBC事務管理; JDBC事務將與JMS事務同步。

有一個小的可能性JDBC TX可能犯和JMS回滾(如果你輸了,例如連接),所以你需要處理重新輸送及使你的代碼冪等;否則你需要完整的XA。

的選項的完整說明,請參見this article

無法控制哪些消費者會得到重新送貨。

在您的JMS代理上配置重試,DLQ等。

編輯:

只是要清楚,這個工作是因爲如上所述,消息通道必須是直接的渠道(或發佈 - 訂閱,沒有任務執行),因此下游業務(JMS,JDBC )在偵聽器容器的線程上運行。它還假定這些下游操作使用JmsTemplate(與偵聽器的連接工廠) - 它將使用偵聽器的Session或帶有相同事務管理器的JdbcTemplate

Spring集成出站適配器在內部使用這些組件。

+0

謝謝加里,這很有幫助。只要JDBC事務控制處理,它應該是足夠的,因爲系統無論如何都被設計爲處理重複的消息。 – Mark1234 2014-12-05 17:16:24

+0

增加了一些說明 - 我不確定Stack Overflow是否會通知提問者有關回答編輯的問題。 – 2014-12-05 18:15:35

+0

再次感謝,我將按照解釋對它進行測試,並希望它能起作用。 – Mark1234 2014-12-05 18:37:07

相關問題