【问题标题】:Azure ServiceBus JMS transaction support not clearAzure ServiceBus JMS 事务支持不清楚
【发布时间】:2020-05-17 04:49:24
【问题描述】:

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

但是在测试期间,我不确定它是否按预期工作,我正在测试行为,同时我对另一个 MS documentation 表示此 JMS over AMQP 协议不支持“事务处理会话”感到困惑。

问题:

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

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

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

更新:

用于 Spring Boot 的 Azure 服务总线启动器将 Qpid 作为依赖项,所以这就是我在后台使用的 - 我首先没有意识到这一点:

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

【问题讨论】:

  • 为了清楚起见,您使用的是Qpid JMS,它通过 AMQP 1.0 实现 JMS API,对吧?
  • Microsoft 在哪里声明 JMS 合规性?即使有一些警告,声称一个有效的 JMS 实现也是一回事,但据我了解,实际的 JMS“合规性”意味着该实现已通过 JMS TCK(微软的实现不会)。
  • 好吧,也许官方没有声明,但是有很多信息他们支持 JMS 并且服务总线实现了可靠的消息传递。无论如何,我现在正在寻找的是如何实现具有消息保护支持的 JMS/替代协议 JMS 处理事务。我正在研究与 Azure 服务总线接口的标准 Java/Spring Boot 堆栈。没有 Qpid JMS。 JMS over AMQP 方法在 Azure 库中实现,如下所述:docs.microsoft.com/en-us/azure/java/spring-framework/…
  • 我阅读了您链接的the documentation。在底部有一个“下一步”部分,其中包含指向this documentation 的链接,表明您需要使用 Qpid JMS 客户端。据我了解,这是 Spring 用来与服务总线通信的 JMS 客户端实现(通过 AMQP 1.0)。您是说您使用的是不同的 JMS 客户端吗?
  • 此外,您链接的文档表明您应该使用包含 Qpid JMS 的com.microsoft.azure:azure-servicebus-jms-spring-boot-starter Maven dependency(即org.apache.qpid:qpid-jms-client)。

标签: azure jms azureservicebus azure-servicebus-queues qpid


【解决方案1】:

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

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

【讨论】:

  • 谢谢蒂姆。我使用“尽力而为 1PC”模式,消息驱动数据库更新的经典案例,所以我仍然需要本地事务。 XA 或 global tx 我没有故意考虑。看起来本地事务可以正常工作 - 我只是在 Spring Integration 核心代码方面遇到了另一个问题,但我将作为新问题打开 :) 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多