Apache ActiveMQ Artemis 有其自身的資源管理器,用於處理 JTA 交易的生命週期。當交易開始時,資源管理器會收到通知,並記錄該交易及其當前狀態。在某些情況下,交易可能會被啟動,然後被遺忘。例如,客戶端可能已崩潰並且永遠不會返回。如果發生這種情況,交易將會無限期地停滯在那裡。
為了處理這個問題,Apache ActiveMQ Artemis 可以(如果已設定)掃描舊的交易,並回滾它找到的任何交易。預設的掃描間隔為 3000000 毫秒(5 分鐘),也就是說,任何超過 5 分鐘的交易都會被移除。可以通過編輯 broker.xml
中的 transaction-timeout
屬性來更改此逾時時間(值必須以毫秒為單位)。 transaction-timeout-scan-period
屬性則設定掃描舊交易的頻率,以毫秒為單位。
請注意,Apache ActiveMQ Artemis 不會單方面回滾任何處於預備狀態的 XA 交易 – 如果您確定這些交易永遠不會被交易管理器解決,則必須通過管理 API 進行啟發式回滾。