Azure ServiceBus JMS 事务支持不明确

Azure ServiceBus JMS transaction support not clear

我正在处理 Java JMS 应用程序连接到 Azure ServiceBus。一旦我发现支持 JMS,我没想到会有任何问题。但是,当我开始创建连接并添加 Spring JmsTransactionManager 时,我收到一条错误消息,提示我的 Azure 订阅是 "Base" 层,因此不支持事务。我所做的是升级到 "Standard" 层,错误已解决。这涵盖了 here.

但是在测试期间,我不确定它是否按预期工作,我正在测试行为,同时我被另一个 MS documentation 弄糊涂了,说 "transacted sessions" 在此 JMS 中不受支持通过 AMQP 协议。

问题:

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

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

谢谢你的回复,因为我很困惑。

更新:

用于 Spring 启动的 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 的人来说,他们怎么会认为他们正在参与更大的分布式事务,而实际上他们并没有。