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

Posted liuyuan1227

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习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();

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

 

  

以上是关于学习ActiveMQ:JMS消息的事务管理的主要内容,如果未能解决你的问题,请参考以下文章

学习ActiveMQ:JMS消息的确认与重发机制

ActiveMQ的学习(ActiveMQ的消息事务和消息的确认机制)

JMS学习四(ActiveMQ消息过滤)

JMS学习六(ActiveMQ消息传送模型)

消息队列ActiveMQ的使用详解

ActiveMQ(03):JMS的可靠性机制