Apache ActiveMQ Artemis 拥有自己的资源管理器来处理 JTA 事务的生命周期。当事务启动时,资源管理器会收到通知并记录事务及其当前状态。在某些情况下,事务可能已启动但被遗忘。例如,客户端可能崩溃并无法恢复。如果发生这种情况,事务将无限期地处于挂起状态。
为了应对这种情况,Apache ActiveMQ Artemis 可以根据配置扫描旧事务并回滚找到的任何事务。默认情况下,扫描时间为 3000000 毫秒(5 分钟),即任何超过 5 分钟的事务都会被移除。可以通过编辑 broker.xml
文件中的 transaction-timeout
属性(值必须以毫秒为单位)来更改此超时时间。transaction-timeout-scan-period
属性配置扫描旧事务的频率(以毫秒为单位)。
请注意,Apache ActiveMQ Artemis 不会单方面回滚处于准备状态的任何 XA 事务 - 必须通过管理 API 以启发式方式回滚,前提是您确定事务管理器永远不会解析它们。