Rabbitmq 1.消息如何保障 100%投递成功?

什么是生产端的可靠性投递?

  1. 保障消息的成功发出
  2. 保障MQ节点的成功接收
  3. 发送端收到MQ节点(Broker)确认应答
  4. 完善的消息进行补偿机制

补偿机制的时机:网络抖动

Rabbitmq 1.消息如何保障 100%投递成功?_第1张图片
1,注意点:落库前是否加事务?
Rabbitmq 1.消息如何保障 100%投递成功?_第2张图片
第一步:消息入库,持久化,快速失败
第二步:发消息
第三步:broker确认,生产端确认监听,confirm Listener

注意: 第三步失败,网络失败,分布式定时任务

第四步: 修改状态(发送中 --》 发送成功)

第五步: get status == 0

分布式定时任务:隔了几分钟才重发

第六步: Retry Send (重发逻辑,还要设计一下,避免正常业务也重发了)

第七步: Retry Count > 3 ,status : 2

人工问题,也要解决:注意一定要解决

(上面第一种适合小系统)下面介绍第二种方案,高并发

Rabbitmq 1.消息如何保障 100%投递成功?_第3张图片
高并发:减少数据库持久化操作,毫秒级别

方案如下:

Rabbitmq 1.消息如何保障 100%投递成功?_第4张图片
注意点:1.一定要等到数据库入库完之后,再去发消息
2.高并发不用事务
3.一次性生成两条消息,第二条是延迟消息(N分钟后发送),投递的队列不一致,消息一样
4.检查消息是否已经成功

第二种方案补偿机制:

1.RPC Resend Command ,MSG DB找不到,要让上游重新再发
2.异步补偿 Callback service, 补偿服务
3.减少DB

你可能感兴趣的:(消息队列)