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.重走该流程

  • 相关阅读:
    ASP.NET Routing Debugger
    浏览器 CSS & JS Hack 手册
    基于vmWare5.5环境的VxWorks系统安装总结
    TFS 迁移到 Git
    关于websocket
    自定义单一模块Model类
    学习 C++的用途
    Navigation Controllers and Table Views(中)
    Mac环境下svn的使用
    减少.NET应用程序内存占用的一则实践
  • 原文地址:https://www.cnblogs.com/hardy-wang/p/13905599.html
Copyright © 2011-2022 走看看