美文网首页
JmsTransactionManager 管理jms事务

JmsTransactionManager 管理jms事务

作者: employeeeee | 来源:发表于2019-05-16 15:34 被阅读0次

    上一篇写了 通过自己的本地事务来管理 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 实现回滚的效果 出现报错时 信息不回录入。

    相关文章

      网友评论

          本文标题:JmsTransactionManager 管理jms事务

          本文链接:https://www.haomeiwen.com/subject/ufwbaqtx.html