Rabbitmq解决分布式事务的原理:可靠消息最终一致性方案
需要保证以下三要素
1、确认生成者一定要将消息可靠投递到MQ【采用MQ的异步confirm消息确认机制】
public interface ConfirmListener {
/**
** handleAck RabbitMQ消息接收成功的方法,成功后业务可以做的事情
** 发送端投递消息前,需要把消息先存起来,比如用KV存储,接收到ack后删除
**/
void handleAck(long deliveryTag, boolean multiple)
throws IOException;
//handleNack RabbitMQ消息接收失败的通知方法,用户可以在这里重新投递消息
void handleNack(long deliveryTag, boolean multiple)
throws IOException;
}
2、MQ消费者能将消息正确消费,采用手动ACK模式【保证消息的幂等性】
3、生产者和消费者事务回滚问题
一、方案
3.1 整体设计思路
3.2 步骤1 - 可靠的消息生产记录消息发送
3.3 步骤2 - 可靠消息生产(修改消息发送状态)
3.4 步骤3 - 可靠消息处理(正常处理)
3.5 步骤4 - 可靠消息处理(消息重发)