Azure ServiceBus JMS 事务支持不明确



我正在开发连接到Azure ServiceBus的Java JMS应用程序。一旦我发现支持JMS,我就没想到会有任何问题。但是,当我开始创建连接并添加 SpringJmsTransactionManager时,我收到一个错误,指出我的 Azure 订阅是"基本"层,因此不支持事务。我所做的是升级到"标准"层,错误已解决。此处对此进行了介绍。

但是,在测试期间,我不确定它是否按预期工作,我正在测试行为,同时我对另一个 MS 文档感到困惑,该文档说此基于 AMQP 协议的 JMS 不支持"事务处理会话"。

问题:

  1. 我是否可以依赖服务总线中的队列将被事务处理,这意味着在我的事务管理器显式调用 COMMIT 之前,不会从队列中删除消息?

  2. 怎么能有人声称符合 JMS 标准,但同时又说我不支持事务处理会话。

感谢您的任何回复,因为我很困惑。

更新:

Spring Boot 的 Azure 服务总线启动器将 Qpid 作为依赖项,因此这就是我在后台使用的 - 我首先不知道这一点:

<!--Qpid-->
<dependency>
<groupId>org.apache.qpid</groupId>
<artifactId>qpid-jms-client</artifactId>
</dependency>

目前没有关于AMQP上的分布式(XA(事务的规范,因此Qpid JMS客户端不提供XA ConnectionFactory实现,所以如果你使用它,那么你肯定不会得到对分布式事务的任何支持。

Qpid JMS客户端本身确实实现了本地事务,因此从这个意义上讲,您可以使用标准的本地事务JMS会话,但是MS可能已经通过spring启动位禁用了它,以劝阻人们使用它,因为本地事务的好处很小,特别是对于使用spring的人来说,他们可能会认为他们正在参与更大的分布式事务,而实际上并非如此。

最新更新