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

    《消息队列高手》

  • 相关阅读:
    重写移动端滚动条[iScroll.js核心代码]
    利用canvas将网页元素生成图片并保存在本地
    微信小程序的拖拽、缩放和旋转手势
    设计模式之访问者(visitor)模式
    设计模式之原型(prototype)模式
    设计模式之享元(flyweight)模式
    设计模式之职责链模式
    设计模式之组合(compose)模式
    leetcode16
    校招真题练习013 找零(头条)
  • 原文地址:https://www.cnblogs.com/bangaj/p/13604857.html
Copyright © 2011-2022 走看看