Azure ServiceBus JMS 事务支持尚不清楚

标签 azure jms azureservicebus azure-servicebus-queues qpid

我正在开发连接到 Azure ServiceBus 的 Java JMS 应用程序。当我发现 JMS 支持时,我没想到会出现任何问题。但是,当我开始创建连接并添加 Spring JmsTransactionManager 时,我收到一条错误,指出我的 Azure 订阅是“基础”层,因此不支持事务。我所做的就是升级到“标准”层,错误已解决。这已涵盖here .

但是在测试过程中,我不确定它是否按预期工作,我正在测试其行为,同时我对另一个 MS documentation 感到困惑此 JMS over AMQP 协议(protocol)不支持“事务处理 session ”。

问题:

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

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

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

更新:

用于 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 session ,但 MS 可能已通过 Spring Boot 位禁用了该 session ,以阻止人们使用它作为本地事务的好处事务非常小,特别是对于使用 Spring 的人们来说,他们可能会认为他们正在参与一个更大的分布式事务,而实际上他们没有参与。

关于Azure ServiceBus JMS 事务支持尚不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60005207/

相关文章:

c# - 是什么导致 Azure SDK 2.4 出现 "Role Instances are taking longer than expected"错误?

deployment - 在 ejb-jar.xml 中添加队列 JNDI 引用?在 EJB/MDB 中发送 JMS 消息

java 消息传递 - 如何创建临时网络

jms - 我可以将 Active 嵌入到我的 Tomcat 中吗?

c# - Azure函数从服务总线读取队列消息两次

azureservicebus - Azure 事件网格与服务总线

azure - 当我们导入Azure Application Insights的标签时,如何忽略带有隐藏链接的标签

c# - 使用 blob StartCopyAsync 时如何获取 azure blob 的更新复制状态

azure - 如何在单个应用程序服务上部署 aspnet core web api 和 aspnet webapi

azure - Azure 服务总线中的订阅能否获取之前代理的消息?