学习ActiveMQ(七):JMS消息的事务管理

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();

 我们在实际业务中,接收消息和对数据库操作要处在一个事务中,这时

  

猜你喜欢

转载自www.cnblogs.com/liuyuan1227/p/10776384.html