可靠消息的最终一致性

2020-07-10  本文已影响0人  MisAutumn

事务发起方执行完事务后发送一条消息,事务的参与方一定能够接收到消息并处理事务成功。强调最终一致。

  1. 本地事务和消息发送的原子性
    事务发起方在本地事务执行成功后消息必须发出,要不就都失败。
  2. 事务参与方接受消息的可靠性
    事务参与方必须能接收到消息,接收失败消息要被重复发送
  3. 消息重复消费问题
    要实现事务参与方的方法幂等性

解决方案:

  1. 本地消息表+定时任务 (交易)
    通过本地事务保证数据操作和消息的一致性,然后通过定时任务将消息发送给消息中间件,确认消息发送成功后删除消息。

a.数据操作和写入消息日志表在本地事务中具有一致性(业务+日志)
b.启动独立线程,定时任务扫描日志并发送给消息中间件,收到成功反馈后删除日志
c.消费消息可使用MQ的ack机制,消费方接收到消息并处理完成后发送确认,否则MQ将不断重复发送消息

  1. RocketMQ事务消息方案
  1. 最大努力通知 (交易后的通知)

目标:发起通知方尽最大努力将业务结果发给接收通知方。
具体:
a.有消息重发机制
b.有校对机制:如果尽最大努力也没通知到,或者接收方消费后要重复消费,此时可由接收方主动向通知方查询,通知方需要提供查询接口。

视频

上一篇下一篇

猜你喜欢

热点阅读