我正在研究连接到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>
我正在研究连接到Azure ServiceBus的Java JMS应用程序。一旦发现支持JMS,我就不会遇到任何问题。但是,当我开始创建连接并添加Spring ...
当前没有针对AMQP上的分布式(XA)事务的规范,因此Qpid JMS客户端不提供XA ConnectionFactory实现,因此,如果您使用该实现,那么可以肯定的是,您将不会获得对分布式事务的任何支持。
Qpid JMS客户端本身确实实现了本地事务,因此在这种意义上,您可以使用标准的本地事务JMS会话,但是MS可能已通过spring boot bit禁用了该功能,以劝阻人们不要将其用作本地事务的好处。相对于使用Spring的人们来说,这是很小的,而实际上却没有的人可能会认为他们正在参与较大的分布式交易。