Spring Integration JMS--Spring代码在RuntimeException时提交了。

问题描述 投票:0回答:1

我想请教有经验的Spring集成开发者,甚至是代码作者,关于我的代码所遇到的奇怪行为。问题是Spring代码在我的RuntimeException上执行COMMIT。以下是我的设置。

1.我配置了标准的JMS入站通道适配器,使用了

<jms:message-driven-channel-adapter />
  1. 我有一个transactionManager,它实现了Best effort 1PC模式--Spring中可用的ChainedTransactionManager。

  2. 我在简单的测试流程中消耗消息,其中JMS入站适配器只发布到直接通道,并通过一个转换端点将转换后的消息发布到另一个直接端点,其中处理程序ServiceActivator故意抛出我的应用程序异常,它扩展了RuntimeException。

现在,当我调试整个流程时,当我走过Spring内部代码时,我总是在配置的事务管理器调用COMMIT的地方结束,因此我的ChainedTransactionManager也执行COMMIT,尽管我模拟错误,因此清楚回滚方案。回滚方法中的断点根本没有被击中。

我可能有什么问题?

现在我又看了一遍代码,即使Spring代码将状态设置为RollbackOnly,并执行了一些异常处理程序,但最后还是成功地进行了,最终它调用了截图上所示的commit行,chainedTransactionManager也指示它的本地TMs提交。

我希望有一些细节上的错误我无法发现:) 谢谢

截图来自类.m2\repository\orgspringframework\spring-jms\5.2.3.RELEASE\spring-jms-5.2.3.RELEASE-sources.jar!\orgspringframework\jms\listener/AbstractPollingMessageListenerContainer.java。

enter image description here

spring-boot spring-integration azureservicebus spring-jms azure-servicebus-queues
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.