美文网首页
本地事务完成才发MQ消息

本地事务完成才发MQ消息

作者: Alen_ab56 | 来源:发表于2022-11-24 10:34 被阅读0次

    前提

    如果消息发送和本地事务在同一个@Transactional注解下,

    如何保证本地事务结束才发送MQ消息?

    @Transactional

        public void save() {

          1. 本地事务

           2. 发MQ;

        }

    注意:MQ一定要在本地事务后面

    解决方案如下

    @Component

    public class MQTransactionHelper {

        @Autowired

        private MqTemplate MqTemplate;

        public <T> void send(String queue, T message) {

            // 是否开启事务判断

            if (TransactionSynchronizationManager.isSynchronizationActive()) {

                TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {

                    @Override

                    public void afterCommit() {

                        mqTemplate.send(message);

                    }

                });

            } else {

                mqTemplate.send(message);

            }

        }

    }

    相关文章

      网友评论

          本文标题:本地事务完成才发MQ消息

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