IBM XMS中CommittableTransaction与session事务哪类是全局事务?
问题解答
针对你提出的两个核心问题,结合IBM MQ XMS的实际运行逻辑给出结论:
- 第一个问题:是,.NET环境下要创建IBM XMS管控的全局XA事务,必须使用
CommittableTransaction()对象。你提到的会话事务connection.CreateSession(true, AcknowledgeMode.SessionTransacted)属于XMS本地会话事务,只在当前会话的生命周期内生效,不接入DTC分布式协调逻辑,不属于全局事务范畴。如果你的消费逻辑只涉及MQ本身的操作,不需要和数据库、其他服务调用等异构资源做事务一致性保障,不需要使用全局XA事务。 - 第二个问题:消息防重复消费的锁定能力,和是否使用全局事务无关。无论是本地会话事务还是全局XA事务,只要你是事务性读取消息,消息被某个消费者实例获取后就会被队列标记为「未提交」状态,自动加锁,其他消费者实例无法读取到同一条消息。只有当当前消费者的事务回滚、或者会话超时断开未提交时,消息才会重新回到队列,开放给其他消费者读取。
补充场景建议:你当前只是双实例负载均衡消费同一队列的场景,没有跨资源的事务一致性要求的话,直接使用原生会话事务就完全可以避免重复消费问题,不需要额外引入XA事务的复杂度。
内容的提问来源于stack exchange,提问作者Bingla
相关产品推荐
相关产品推荐

