当前位置: 首页 > 知识库问答 >
问题:

一些Spring的问题

贲绪
2023-03-14

我有一个关于JMS和Spring集成的问题。

我有3个队列,让我们称它们为QUEUE_SOURCE、QUEUE_TARGET和QUEUE_ERROR。DefaultMessageListenerContainer用于从队列源读取消息。

我已经为这些队列配置了JMS事务管理器。

当我从QUEUE_源读取消息,但将消息发布到QUEUE_目标时出错时,我可以看到在抛出异常之前,消息会重试几次,从而触发回滚。

我猜发生的事情是这样的:

1)开始事务2)读取消息3)尝试在目标队列QUEUE_TARGET上发布消息,但失败4)由于错误而不提交,因此消息不会从QUEUE_SOURCE中删除

1) 启动事务2)读取消息3)从队列\源删除消息4)尝试在目标队列\目标上发布消息,但失败5)将消息放回队列\源

所有重新交付失败后,将触发回滚。

然而,在这个回滚过程中发生的事情让我困惑。我不知道消息在哪里结束,它肯定不会在源队列中结束,也不会在错误队列中结束。那么,在这个回滚过程中到底发生了什么?

共有1个答案

辛才俊
2023-03-14

你需要展示你的确切配置,但你的猜测#1已经接近;代理传递消息,但在提交之前不会将其从队列中移除。如果代码抛出异常,框架将执行会话。rollback()代理将重新提交。如果传递成功,框架将提交事务,只有到那时消息才会被删除。

 类似资料:
  • 我使用的是带有spring Integration 5.3.0的spring boot 2.3.0版本,不知何故,我无法让下面的代码正常工作。应用程序启动,没有错误,但当控制到方法时,什么也没有发生或打印。谁能告诉我我错过了什么。任何帮助都很感激。谢了。

  • 问题内容: 我正在使用Spring 3和Hibernate 3.6开发Web应用程序。目前,我尝试了解Spring和Hibernate的缓存工作原理。我找到了一些有关使用Hibernate进行缓存的资源以及一些有关Spring的资源,现在我尝试将我的信息汇总在一起。我仍然对这两个框架都有一些疑问,如果有人可以回答或告诉我这里列出的事实是否正确,我将很高兴。 在大多数情况下,简短的回答(是/否)就足

  • 问题内容: 我是一名新的golang开发人员,我想知道为什么需要在项目的根目录设置环境变量。 如果我同时从事多个项目,则每次都需要重新设置环境变量以指向不同的位置。 在我的设置中,我已设置为。这是我所有golang项目的通用目录。 只是为了澄清:将项目数据放入 如果(据我所知)全部用于安装第三方库,那么为我所有的项目提供一个目录并不安全,因此所有必需的第三方库都安装在同一lib目录中,并且每当我在

  • 主要内容:1.多级缓存,2.为什么大厂在大表做水平分表时严禁使用自增主键,3.布隆过滤器应用,4.IP直连的问题以及如何解决,5.负载均衡器是什么/类型/策略,6.为何禁用外健约束,7.慢SQL,8.redis,9.锁,10.oom,11.如何解决幂等性操作,12.hashmap和hashtable得到区别,13.hashmap有哪些线程安全的方法,14.5种IO,15.wait和sleep区别,,,,,,,,,,1.多级缓存 1.客户端缓存 页面缓存,浏览器缓存,APP缓存 2.应用缓存 CD

  • 主要内容:1.测试,2.使用FactoryBean与 自己创建对象对比,3.FactoryBean 流程分析,4.总结FactoryBean就是生成Bean的, 其目的就是为了创建对象 FactoryBean 就是一个工厂Bean,相当于将工厂类放到了Spring中管理、当获取此Bean的时候返回的是此工厂生成的Bean。需要经过完整的一系列过程才可以创建出Bean 1.测试 当创建对象的过程复杂时可使用BeanFactory,调用方只需要注入就可使用 FactoryBean使创建对象操作 更加

  • 问题内容: 最近,我开始学习使用Java进行套接字编程,还有一些一般性的问题。 有一个bind()方法,以及一个connect()和disconnect()。没有unbind()。这是因为断开连接后套接字没有绑定吗?程序退出后,垃圾回收会处理吗?还是这不是一个有效的问题? 另外,在创建DatagramSocket时,如果仅提供端口和地址,会有什么不同?我正在创建一个程序来收集网络外的数据,因为数据