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的消费端也需要这部分的内容。 从而会发生,事务不同步的情况。 上面的内容可以避免这样的情况发生