zoukankan      html  css  js  c++  java
  • RabbitMQ 消息如何保障100%的投递成功

    一、消息如何保障100%的投递成功

    1、什么是生成端的可靠性投递

      保障消息的成功发出

      保障MQ节点的成功接收

      发送端收到MQ节点(Broker)确认应答

      完善的消息进行补偿机制

    方案1: 消息信息入库,对消息状态进行标记

    BIZ DB: 业务DB

    MSG DB: 消息DB

    这两个DB可以放在一个DB里。

    Step1 记录要发送的消息到MSG DB,标记消息状态为0

    Step2: 向MQ发送消息

    Step3: MQ异步发送确认消息到生产者

    Step4: 生产者接受到确认消息,将消息标记为1,代表该消息已经确认过了。

    Stop5: 抓取状态为0(未确认的)的消息(超过5分钟的消息)

    Stop6: 重新发送消息

    Step7: 重试次数超过3次, 状态改为2,代表重试出错。这个是极端情况,可以人工处理。如果是业务逻辑错误,则修改业务逻辑。

    缺点: 不适合高并发场景,对消息进行入口,更新消息,增加了IO负担。 

    方案2: 消息的延迟投递,做二次确认,回调检查

    1.发送消息(生成两条消息 第一条真实消息,第二条消息,延迟确认的消息,可能延迟消息可能会在第2分钟或者第三分钟后发送)

    2.broker接收消息

    3.监听的消费端接收消息

    4.消费端处理完消息之后,发送一个确认消息到broker

    5.监听确认消息的消息队列,接收确认消息,Callback服务接收到,存储到数据库

    6.延迟投递的消息发送了,被Check Detail监听到,Callback服务接收到,检查数据库是否存储

    7.检查到没有储存,重发该消息,ReSend一次这个消息

    8.重走该流程

  • 相关阅读:
    73. Set Matrix Zeroes
    289. Game of Live
    212. Word Search II
    79. Word Search
    142. Linked List Cycle II
    141. Linked List Cycle
    287. Find the Duplicate Number
    260. Single Number III
    137. Single Number II
    Oracle EBS中有关Form的触发器的执行顺序
  • 原文地址:https://www.cnblogs.com/hardy-wang/p/13905599.html
Copyright © 2011-2022 走看看