【发布时间】:2020-05-17 04:49:24
【问题描述】:
我正在开发连接到 Azure ServiceBus 的 Java JMS 应用程序。一旦我发现支持 JMS,我没想到会出现任何问题。但是,当我开始创建连接并添加 Spring JmsTransactionManager 时,我收到一条错误消息,提示我的 Azure 订阅是“基础”层,因此不支持事务。我所做的是升级到“标准”层并解决了错误。这已覆盖here。
但是在测试期间,我不确定它是否按预期工作,我正在测试行为,同时我对另一个 MS documentation 表示此 JMS over AMQP 协议不支持“事务处理会话”感到困惑。
问题:
我能否依赖服务总线中的队列进行事务处理,这意味着在我的事务管理器显式调用 COMMIT 之前,消息不会从队列中删除?
怎么会有人声称 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-starterMaven dependency(即org.apache.qpid:qpid-jms-client)。
标签: azure jms azureservicebus azure-servicebus-queues qpid