public class MyService {  
  
    @Autowired  
    private RabbitTemplate rabbitTemplate;  
  
    @Transactional  
    public void myTransactionalMethod() {  
        // 执行数据库操作  
        // ...  
  
        // 注册事务同步,确保在事务成功提交后发送消息  
        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {  
            @Override  
            public void afterCommit() {  
                sendRabbitMQMessage();  
            }  
        });  
    }  
  
    private void sendRabbitMQMessage() {  
        String message = "事务成功提交后的消息";  
        rabbitTemplate.convertAndSend("exchangeName", "routingKey", message);  
    }  
}

实际场景中, 一些操作完成之后需要发送MQ,MQ的消费端也需要这部分的内容。 从而会发生,事务不同步的情况。 上面的内容可以避免这样的情况发生