交易如何運作

 常見問題 > 使用 Apache ActiveMQ Classic > 交易如何運作

ActiveMQ Classic 中有兩層交易支援

  • JMS 交易 - Session 上的 commit()/rollback() 方法(類似於對 JDBC 連線執行 commit()/rollback()
  • XA 交易 - 其中 XASession 作為 XAResource,透過與訊息代理器(Message Broker)通訊來運作,就像 JDBC 連線透過與資料庫通訊在 XA 交易中運作一樣。

兩者的實作方式類似。當在已交易(或 XA 已交易)的 Session 上執行操作時,會將交易命令傳送至代理器,並帶有唯一的交易 ID,接著是所有常用的命令(傳送訊息、確認訊息等)。當在 Session 上呼叫 commit()rollback() 時,此命令會傳送至代理器,以提交或回滾交易。

現在,在交易內已交易的 Session 上執行的操作,例如傳送訊息或確認訊息,實際上並不會真正執行傳送或確認,直到提交發生。因此,代理器會明確地分別處理這些情況 - 本質上會緩衝命令,直到提交發生時,才會真正傳送或確認訊息。

ActiveMQ Classic 使用 TransactionStore(由所有持久性適配器實作)來處理交易。TransactionStore 將快取所有訊息和 ACK,直到提交或回滾發生。除了儲存訊息外,代理器還會暫緩分發任何訊息,直到 Session 提交。如果您想查看程式碼,請查看 MemoryTransactionStore,它為記憶體和 JDBC 持久性適配器代理交易。XA 交易的唯一真正區別是,在 PREPARE 階段,我們必須將收到的每個命令(傳送訊息或確認訊息命令)寫入持久性儲存,以便我們能夠正確恢復。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 The Apache Software Foundation 的商標。版權所有 © 2024,The Apache Software Foundation。根據 Apache License 2.0 授權。