JmsTransactionManager 管理jms事务

上一篇写了 通过自己的本地事务来管理 jms的事务
这一篇说一下 用 JmsTranscationManager来管理事务

image.png

可以看到 和本地事务相比 这种形式 是通过jmsTranscationMnager 生成了一个JMSResourceHolder来管理session。
所以也可以想到 在代码实现的时候 就一定是要对JmsTransactionManager进行配置的

所有要新建一个配置类

 @EnableJms
@Configuration
public class ConfigJms {
    @Bean
    JmsTransactionManager jmsTransactionManager(ConnectionFactory cf) {
        return new JmsTransactionManager(cf);
    }

    @Bean
    JmsTemplate jmsTemplate(ConnectionFactory cf) {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(cf);
        return jmsTemplate;
    }

    @Bean
    JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory cf,
                                                               PlatformTransactionManager transactionManager,
                                                               DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, cf);
        factory.setReceiveTimeout(10000L);
        factory.setConnectionFactory(cf);
        factory.setTransactionManager(transactionManager);
        return factory;
    }
}

主要是配置了一个自己的JmsListenerContainerFactory 然后在service的方法中

    @Transactional
    @JmsListener(destination = "customer:msg:new", containerFactory = "jmsListenerContainerFactory")
    public void sendMsg(String msg) {
        String msgReply = "Local reply:" + msg;
        jmsTemplate.convertAndSend("customer:msg:reply", msgReply);
        if (msg.contains("error")) {
            sendError();
        }
    }

加上containerFactry 名字是自己定义的containerFactory
在之前使用本地session的时候 如果使用方法的方式来进行传递消息
是无法进行回滚的。
加上@Transactional 实现回滚的效果 出现报错时 信息不回录入。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这部分的参考文档涉及数据访问和数据访问层和业务或服务层之间的交互。 Spring的综合事务管理支持覆盖很多细节,然...
    竹天亮阅读 1,103评论 0 0
  • 1 事务 1.1 事务管理方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用Tra...
    鑫奕航阅读 2,904评论 0 1
  • PartV.TransactiomManagement github 地址 https://github.com/...
    天幕_bc1a阅读 1,191评论 2 0
  • 1.数据库事务基础知识 1.1.何为数据库事务 数据库事务的4个特性 原子性:组成一个事务的多个数据库操作是一个不...
    小螺钉12138阅读 1,713评论 1 18
  • spring事务管理是指在业务代码在出现异常之后,对之前的操作进行回滚,保证数据库数据的一致性 分为编程式事务管理...
    MicoCube阅读 9,291评论 0 3

友情链接更多精彩内容