美文网首页
如何保障消息 100% 投递成功?

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

作者: qyfl | 来源:发表于2019-09-26 22:25 被阅读0次

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

    • 保障消息的成功发出
    • 保障 MQ 节点成功接收
    • 生产者收到 MQ 节点(Broker)确认应答
    • 消息补偿机制

    方案一:

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

    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

    相关文章

      网友评论

          本文标题:如何保障消息 100% 投递成功?

          本文链接:https://www.haomeiwen.com/subject/dtbquctx.html