本地事务完成才发MQ消息

前提

如果消息发送和本地事务在同一个@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);

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容