《消息队列高手课》课程笔记(四)

如何确保消息不会丢失?

检测消息丢失的方法

  • 我们可以利用消息队列的有序性来验证是否有消息丢失。
    • 在 Producer 端,我们给每个发出的消息附加一个连续递增的序号,然后在 Consumer 端来检查这个序号的连续性。
    • 如果没有消息丢失,Consumer 收到消息的序号必然是连续递增的,或者说收到的消息,其中的序号必然是上一条消息的序号 +1。
    • 如果检测到序号不连续,那就是丢消息了。
    • 还可以通过缺失的序号来确定丢失的是哪条消息,方便进一步排查原因。
  • 如果 IT 基础设施比较完善,一般都有分布式链路追踪系统,使用类似的追踪系统可以很方便地追踪每一条消息。

确保消息可靠传递

  • 一条消息从生产到消费完成这个过程,可以划分三个阶段:
    在这里插入图片描述

    • 生产阶段
      • 在这个阶段,从消息在 Producer 创建出来,经过网络传输发送到 Broker 端。
      • 你在编写发送消息代码时,需要注意,正确处理返回值或者捕获异常,就可以保证这个阶段的消息不会丢失。
        • 同步发送时,只要注意捕获异常即可。
        • 异步发送时,则需要在回调方法里进行检查。
    • 存储阶段
      • 在这个阶段,消息在 Broker 端存储,如果是集群,消息会在这个阶段被复制到其他的副本上。
      • 如果对消息的可靠性要求非常高,可以通过配置 Broker 参数来避免因为宕机丢消息。
        • 对于单个节点的 Broker,需要配置 Broker 参数,在收到消息后,将消息写入磁盘后再给 Producer 返回确认响应。
        • 如果是 Broker 是由多个节点组成的集群,需要将 Broker 集群配置成:至少将消息发送到 2 个以上的节点,再给客户端回复发送确认响应。
    • 消费阶段
      • 在这个阶段,Consumer 从 Broker 上拉取消息,经过网络传输发送到 Consumer 上。
      • 不要在收到消息后就立即发送消费确认,而是应该在执行完所有消费业务逻辑之后,再发送消费确认。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值