我正在尝试设置 JMS 客户端以使用具有可变超时的 XA 事务,并与 Active MQ 经典(带有 ActiveMQ 代理 5.15.4 的 Amazon MQ)对话
调用jmsSession.getXAResource().setTransactionTimeout(timeOut)
返回false
,表示没有成功。这意味着向代理发送 SESS_XA_SET_TIMEOUT_RESP
导致 !OK
,但我没有看到任何可以解释原因的日志(就此而言,到目前为止我看不到来自代理的任何日志) .相同的 XA 逻辑代码适用于 Artemis。
我发现 Resource Manager Configuration 说可以在代理配置文件中设置 [default] 事务超时,但是不清楚具体如何指定,configuration file schema 没有提到 {{ 1}} 属性,我也看不到任何可以指定的“通用”属性列表。
问题分为两部分:
答案 0 :(得分:0)
好的,简短的回答 - ActiveMQ Classic (5.x) 不支持分布式事务超时。
我显然正在查看 Artemis 的客户端代码,而不是 Classic 的。在经典客户端中,TransactionContext.setTransactionTimeout()
仅返回 false:
@Override
public boolean setTransactionTimeout(int seconds) throws XAException {
return false;
}
据我所知,这意味着 XA 事务永远不会超时,但我找不到任何讨论它的文档。