Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理。这将允许JMS应用利用Spring的事务管理特性。JmsTransactionManager在执行本地资源事务管理时将从指定的ConnectionFactory绑定一个ConnectionFactory/Session这样的配对到线程中。JmsTemplate会自动检测这样的事务资源,并对它们进行相应操作。
在Spring整合JMS的应用中,如果我们要进行本地的事务管理的话非常简单,只需要在定义对应的消息监听容器时指定其sessionTransacted属性为true。
xml: 增加<property name="sessionTransacted" value="true"/>
<!--配置 消息监听容器--> <bean id="jmsContainer" class=" org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destination" ref="queueDestination"/> <property name="messageListener" ref="consumerMessageListener"/> <!--应答模式是 INDIVIDUAL_ACKNOWLEDGE--> <!--AUTO_ACKNOWLEDGE = 1 自动确认 CLIENT_ACKNOWLEDGE = 2 客户端手动确认 DUPS_OK_ACKNOWLEDGE = 3 自动批量确认 SESSION_TRANSACTED = 0 事务提交并确认 INDIVIDUAL_ACKNOWLEDGE = 4 单条消息确认--> <property name="sessionAcknowledgeMode" value="4"/> <!--对消息开启事务模式--> <property name="sessionTransacted" value="true"/> </bean>
监听器加入session.rollback();消息进行回滚重传(上一篇中因为还没有学习回滚,所以用的session.recover()实现的重发,现在就可以使用事务rollback()方法实现了)
session.rollback();
我们在实际业务中,接收消息和对数据库操作要处在一个事务中,这时
原文地址:https://www.cnblogs.com/liuyuan1227/p/10776384.html
时间: 2024-10-09 20:19:19