zoukankan      html  css  js  c++  java
  • 消息队列核心-如何保证消息不丢失

    使用消息队列,绕不开的一个问题就是如何保证消息不丢失,现在主流的消息中间件都提供了完整的消息可靠性保证机制,可以确保消息的可靠传递,本文以rocketMq为例介绍如何保证消息不丢失,其他消息队列类似。原文地址

    消息传递过程

    基本上所有的消息都划分为三个阶段生产、存储、消费,如下图

    • 生产阶段: 在这个阶段,从消息在 Producer 创建出来,经过网络传输发送到 Broker 端。
    • 存储阶段: 在这个阶段,消息在 Broker 端存储,如果是集群,消息会在这个阶段被复制到其他的副本上。
    • 消费阶段: 在这个阶段,Consumer 从 Broker 上拉取消息,经过网络传输发送到 Consumer 上。

    生产阶段

    生产阶段一般是通过confirm机制,producer把消息发送给broker,broker收到消息后会给客户端响应回执,producer收到回执则完成一次完整的消息发送。producer如果没有收到响应回执则会重发。

    存储阶段

    如果Broker是单点的,可以通过参数设置,当消息持久化后再给响应回执,如果是 Broker 是由多个节点组成的集群,需要将 Broker 集群配置成:至少将消息发送到 2 个以上的节点,再给客户端回复发送确认响应。这样当某个 Broker 宕机时,其他的 Broker 可以替代宕机的 Broker,也不会发生消息丢失

    消费阶段

    消费阶段和生产阶段类似,都是通过confirm机制保障消息不丢失的,客户端从 Broker 拉取消息后,执行用户的消费业务逻辑,成功后,才会给 Broker 发送消费确认响应。如果 Broker 没有收到消费确认响应,下次拉消息的时候还会返回同一条消息,确保消息不会在网络传输过程中丢失,也不会因为客户端在执行消费逻辑中出错导致丢失。

    reference

    《消息队列高手》

  • 相关阅读:
    jQuery邮箱验证
    查看图片前进后退效果
    jQuery实现全选与反选
    jQuery在p前后添加节点
    jQuery中的fadeIn、fadeOut、fadeTo的应用
    jQuery中图片隐藏效果的所有方法
    jQuery中animate的应用(图片自动移动)
    jQuery图片复制
    N!具体数值有多少位数字
    顺序队列的初始化,建立,插入,查找,删除。
  • 原文地址:https://www.cnblogs.com/bangaj/p/13604857.html
Copyright © 2011-2022 走看看