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

2019-09-26  本文已影响0人  qyfl

可靠性投递需要四个部分:

方案一:

消息先入库,对消息的状态进行标记。

  1. 消息先入库,对消息的状态进行标记。例如:status1
  2. 向 MQ 发送消息。
  3. MQ 将应答发送给生产端,生产端要监听 MQ 的应答。
  4. 如果收到了确认的应答。那么修改消息的状态为发送成功。
  5. 如果没有收到 MQ 应答,需要有一个定时任务捞取 status1 状态的消息再次发送。这个时候消息需要有最大的重试次数的限制。

流程如下图所示:


方案一.png

方案二:

消息的延迟投递,做二次确认,回调检查。

  1. 先把消息发送给 MQ 的队列 A。
  2. 延迟一定的时间第二次发送一样的消息给 MQ 队列 B。B 是 A 的备份。
  3. 有一个单独的服务(callback service)监听 MQ 队列 A 的响应。并且接受队列 B 的消息。
  4. 如果 callback service 收到了队列 A 的消息确认,那么入库标记。
  5. 延迟投递的消息开始发送到 B 队列。
  6. callback service 收到队列 B 中的数据,去数据库里查询这个消息的状态
  7. 如果状态不是成功则 callback service 则通知生产者,该消息没有收到响应。
  8. 生产者如果收到 callback service 的消息。那么就走计数,补偿,告警等步骤。

流程如下图所示:


方案二.png
上一篇下一篇

猜你喜欢

热点阅读