本地事务完成才发MQ消息

前提

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

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

@Transactional

    public void save() {

      1. 本地事务

       2. 发MQ;

    }

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

解决方案如下

@Component

public class MQTransactionHelper {

    @Autowired

    private MqTemplate MqTemplate;

    public 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消息)