我應該使用交易嗎
用戶端可以消費訊息的主要方法有四種。它們是
- 自動確認
- 透過
Message.acknowledge()
顯式確認 - JMS 交易
- XA
關於 XA 的討論,請參閱:我應該使用 XA 嗎
1 和 2 與 3 和 4 之間的主要區別在於,後者允許在處理過程中發生錯誤時回滾訊息並重新傳遞。 沒有 JMS 的「取消確認」。 因此,在大多數使用情況下,應優先選擇 JMS 交易而非訊息確認。
一個常見的誤解是交易本質上很慢。 事實上,從代理的角度來看,使用 JMS 交易與呼叫 Message.acknowledge()
之間的效能差異不大。 但是,當傳遞模式設定為持續性時,會產生效能損失。 這會導致代理封鎖,直到提交同步到磁碟。 這類似於使用非交易式 JMS 會話時 Message.acknowledge()
的封鎖方式。
非持續性傳遞模式也提供交易支援。
批次交易是處理訊息的最快方式!
值得注意的是,消費持續性訊息的最快方式是使用 JMS 交易結合訊息批次處理,例如,讓提交邊界包含多個訊息,而不僅僅是一個。 這適用於生產者和消費者,也適用於同時身兼兩者的用戶端。
當使用交易時,例如,可以在單個原子步驟中傳送一批 1000 條訊息。 訊息傳輸是非同步的,因此速度非常快。 生產者只需要在每個批次執行一次提交,以最大程度地減少因磁碟同步而產生的延遲。