当前位置: 首页 > news >正文

【基础篇-消息队列】—— 如何实现单个队列的并行消费及如何保证消息的严格顺序

目录

    • 一、如何实现单个队列的并行消费
    • 二、 如何保证消息的严格顺序

本文来源:极客时间vip课程笔记

一、如何实现单个队列的并行消费

  • 如果不要求严格顺序,如何实现单个队列的并行消费?关于这个问题,有很多的实现方式,其中实现的思路之一是这样的。
  • 比如说,队列中当前有 10 条消息,对应的编号是 0-9,当前的消费位置是 5。同时来了三个消费者来拉消息,把编号为 5、6、7 的消息分别给三个消费者,每人一条。过了一段时间,三个消费成功的响应都回来了,这时候就可以把消费位置更新为 8 了,这样就实现并行消费。
  • 这是理想的情况。还有可能编号为 6、7 的消息响应回来了,编号 5 的消息响应一直回不来,怎么办?这个位置 5 就是一个消息空洞。为了避免位置 5 把这个队列卡住,可以先把消费位置 5 这条消息,复制到一个特殊重试队列中,然后依然把消费位置更新为 8,继续消费。再有消费者来拉消息的时候,优先把重试队列中的那条消息给消费者就可以了。
  • 这是并行消费的一种实现方式。需要注意的是,并行消费开销还是很大的,不应该作为一个常规的,提升消费并发的手段,如果消费慢需要增加消费者的并发数,还是需要扩容队列数。

二、 如何保证消息的严格顺序

  • 我们多次提到过,主题层面是无法保证严格顺序的,只有在队列上才能保证消息的严格顺序。
  • 如果说,你的业务必须要求全局严格顺序,就只能把消息队列数配置成 1,生产者和消费者也只能是一个实例,这样才能保证全局严格顺序。
  • 大部分情况下,我们并不需要全局严格顺序,只要保证局部有序就可以满足要求了。比如,在传递账户流水记录的时候,只要保证每个账户的流水有序就可以了,不同账户之间的流水记录是不需要保证顺序的。
  • 如果需要保证局部严格顺序,可以这样来实现。在发送端,我们使用账户 ID 作为 Key,采用一致性哈希算法计算出队列编号,指定队列来发送消息。一致性哈希算法可以保证,相同 Key 的消息总是发送到同一个队列上,这样可以保证相同 Key 的消息是严格有序的。如果不考虑队列扩容,也可以用队列数量取模的简单方法来计算队列编号。

相关文章:

  • 做网站要sql 数据库名字账号密码正规seo多少钱
  • 网站建设有哪些各大网站收录查询
  • 武汉市城乡建设委员会官方网站广州网站建设公司
  • 360网站建设企业app推广拉新接单平台
  • php语言开发网站流程百度关键词快速排名方法
  • 阳谷网站建设价格百度竞价排名技巧
  • LangChain网页自动化PlayWrightBrowserToolkit
  • 在Ubuntu下建设自己的本地大模型docker+ollama+openwenui
  • leetcode173.二叉搜索树迭代器
  • 深入理解 BOM:浏览器对象模型详解
  • RabbitMQ是什么?以及优缺点
  • Kafka 监控与调优实战指南(一)
  • 通过Prompt提示构建思维链
  • FSMC控制LCD(TFTLCD:Z350IT002)显示案例
  • OpenAI-Kotlin文档详解
  • 基于目标驱动的分布式敏捷开发
  • 顺序表整理和单项链表01 day20
  • 华为云Flexus+DeepSeek征文 | 基于华为云的 Dify-LLM 企业级 AI 开发平台部署指南
  • AI 产品部署和交付的基础设施——全景解析
  • 【Linux手册】环境变量与命令行参数:贯穿系统与应用的隐形桥梁
  • 09.【C语言学习笔记】指针(一)
  • Spring Ai Alibaba Graph实现五大工作流模式
  • 马克思主义基本原理期末复习下
  • Tomcat服务
  • 60天python训练营打卡day41
  • # Python中等于号的使用