我正在使用事务来读取和确认 IBM 队列上的消息,我想知道当多个消费者实例从同一个队列中读取时,创建的会话是否会全局connection.CreateSession(true, AcknowledgeMode.SessionTransacted)
锁定消息?
背景:我编写了一个小型 .NET Core 后台服务,它使用 IBM XMS 获取队列的消息。此服务的实例将托管在两个不同的服务器上(负载平衡),每个服务将连接到同一个队列。我担心的是,由于不同服务器上的两个不同消费者正在从同一个队列中读取,他们可能会尝试使用相同的消息。
我最近遇到了SimpleXAConsumer示例,其中使用了CommittableTransaction()对象而不是会话事务。该文件指出:
“当使用 XA 事务时,事务控制是通过分布式事务协调器 (DTC)全局事务进行的,而不是通过 XMS 会话。”
...这让我相信 XMS 会话事务不是全局的,除非使用 CommittableTransaction() 对象。
如果有人可以确认,那就太好了:
- 如果必须使用 CommittableTransaction() 来创建全局事务。
- 如果一个全局事务锁定了一条消息,以便没有其他消费者可以使用它。