Alibaba Spring Cloud 二十 RocketMQ顺序消息

RocketMQ 与 Spring Cloud Stream整合(顺序消息) RocketMQ 提供了两种顺序级别: 普通顺序消息:Producer 将相关联的消息发送到相同的消息队列。 完全严格顺序:在【普通顺序消息】的基础上,Consumer 严格顺序消费。 官方文档是这么描述的: 消息有序,指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。RocketMQ 可以严格的保证消息有序。 顺序消息分为全局顺序消息与分区顺序消息,全局顺序是指某个 阅读详情

在分布式消息系统中,通常默认情况下无法保证消息的严格顺序,因为消息会被拆分到多个分区(Queue)进行并行存储和消费。但在某些业务场景下(如订单流程、支付流水处理等),我们需要保证针对同一业务实体(例如同一个订单 ID)的所有消息按照发送顺序被消费。

RocketMQ 通过**顺序消息(Ordered Message)**特性为我们提供了有序消费的能力。下面将从概念、原理、使用示例和常见问题几个方面进行说明。


1. 顺序消息的概念

  • 全局顺序:所有发送到某个 Topic 的消息都按照其发送顺序被消费。这要求 Topic 在物理上只有一个 Queue 或只用一个消费者线程来处理消息,一般不适用于高并发场景。
  • 分区顺序(分区有序):同一分区(Queue)内的消息按照先后顺序被消费,不同分区之间互不影响。在业务层面,如果能够将相同业务实体(如相同订单 ID)的消息路由到同一分区,即可保证该实体维度下的顺序性。

实践中,大多数场景采用分区顺序,因为它可以在保证业务实体局部顺序的同时,仍然保留一定的并行消费能力。


2. RocketMQ 顺序消息的原理

  1. 消息在 Broker 上的存储
    RocketMQ 默认将同一 Topic 的消息分散到多个 Queue 上。若要实现某些消息的顺序消费,需要对相同“业务键”或“分组键”进行一致的分区路由,让它们全部写入相同的 Queue。

  2. 消费端的有序消费
    在消费时,RocketMQ 提供了 “顺序消费 (Orderly)” 的拉取方式(ConsumeMessageOrderlyService),会串行地对每个 Queue 逐一加锁并顺序拉取、处理消息,避免并发消费同一 Queue 上的消息。

    • 只有当 Consumer 成功处理了当前 Queue 上的消息,并提交消费进度,才会继续拉取下一批消息。
    • 因此,一个分区(Queue)对应一个消费线程,从而在该 Queue 上保证消息的处理顺序。

3. 顺序消息的使用示例

3.1 Producer 侧(发送有序消息)

在 RocketMQ 的 Java Client 中,可以通过在 send() 方法中指定消息队列选择器(MessageQueueSelector)的方式,将带有相同业务键的消息发送到同一个 Queue 上。

DefaultMQProducer producer = new DefaultMQProducer("orderly_producer_group");
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();

String topic = "OrderTopic";

// 假设有多个订单 ID,这里用相同订单ID来演示
int orderId = 123456;

try {
   
   
    for (int i = 0; i < 5; i++) {
   
   
        String body = "Order Step " 
Java领域Spring Cloud Alibaba RocketMQ:消息队列应用 随着分布式系统和微服务架构的广泛应用,消息队列在系统解耦、异步通信、流量削峰等方面发挥着至关重要的作用。本文旨在深入探讨Spring Cloud Alibaba集成RocketMQ在Java领域的应用,详细介绍RocketMQ的核心概念、算法原理、实际操作步骤以及在实际项目中的应用案例。我们将从理论和实践两个层面,全面剖析如何利用Spring Cloud Alibaba和RocketMQ构建高效、稳定的分布式系统。 阅读详情

相关推荐

Alibaba Spring Cloud 十九 RocketMQ消息队列

如果你的微服务使用了 Spring Cloud Alibaba,可以通过引入依赖</</</</配置文件spring:cloud:stream:rocketmq:binder:bindings:output:input:发送消息@Autowired// 发送消息到 test-topic消费消息@Service这个方式基于 Spring Cloud Stream 的抽象进行开发,极大简化了与 RocketMQ 的整合。RocketMQ。

空 940

Alibaba Spring Cloud 二十二 RocketMQ 普通消息

普通消息是 RocketMQ 最常用的消息类型,适用于绝大多数异步通信和事件驱动场景。在Producer侧,可以灵活选择同步、异步或单向发送模式,平衡可靠性和性能;在Consumer侧,则可根据业务需要选用集群消费或广播消费。需要对消息可能重复消费重试死信队列等机制做好认知和处理,以确保业务逻辑的可靠性和幂等性。结合其他高级特性(顺序消息、延迟消息、事务消息等),RocketMQ 可以在不同的分布式场景下提供全面的解决方案。RocketMQ 官方文档RocketMQ GitHub 仓库。

空 770

Alibaba Spring Cloud 二十八 RocketMQ Consumer

Consumer在 RocketMQ 中负责从 Broker 拉取并处理消息,是构建异步和事件驱动系统的重要组件。集群消费与广播消费两种模式能覆盖绝大部分业务需求;针对顺序场景还有顺序消费模式可以保证严格顺序。合理编写消费逻辑并处理异常重试死信队列和重复消息等问题,是保证系统可靠性的关键。结合等运维工具,可以轻松掌握集群状态、队列分配和消息堆积等信息,为及时定位故障和扩展服务提供支持。

空 826

图像识别火灾检测系统实战:从火焰特征到YOLO部署全解析

计算机视觉技术正深入改变传统消防的感知方式。图像识别火灾检测利用摄像头采集的视频流,通过颜色、动态和形态特征分析,实现早期火情的自动发现与定位。其核心原理在于,火焰在视觉上具有独特的颜色分布、闪烁特性和轮廓变化,借助目标检测模型如YOLO,可在复杂场景中区分真实火焰与干扰物。这项技术广泛应用于仓库、园区、隧道等大空间场所,是智慧消防的重要支撑。本文从火焰视觉特征、数据集构建、模型选型与系统架构设计出发,结合部署实践中的误报与算力优化经验,为开发者提供一套可落地的视频火焰检测方案。

weixin_42533751的博客 245

以太网传输硬件设计大全

1.网线的介绍RJ45由插头和插做组成,也就是我们常说的网口和网线。RJ45 网线插头又称水晶头,共有八芯做成。RJ45网络传输线分为直通线、交叉线和全反线。直通线用于异种网络设备之间的互连,例如,计算机与交换机。交叉线用于同种网络设备之间的互连,例如,计算机与计算机。全反线用于超级终端与网络设备的控制物理接口之间的连接。下面将介绍一下各线的作用和区别。1.直通线:又叫正线或标准线,两端采用568B做线标准,注意两端都是同样的线序且一一对应。直通线是应用最广泛,现在最常用的线。

weixin_45365488的博客 6749

C语言图形化界面——含图形、按钮、鼠标、进度条等部件制作(带详细代码、讲解及注释)

本文借助easyx库函数(提供下载链接),很方便地用C语言实现了鼠标、按钮、进度条、坐标尺等操作,为普通C程序的友好人机交互界面提供了一种简单便捷的方案。

体会编程语言独到的美 17万+

通达信-申万宏源金融终端本地数据转sqlite3,2、解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

为量化做准备,通达信-申万宏源金融终端本地数据转sqlite3,解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据

wuyaqi的博客 511

拿下华为性格测试!

华为性格测试指南

weixin_41171614的博客 5271

9、工业数据管理:Historian、ERP、MES与资产模型解析

本文深入解析了工业数据管理中的核心概念与技术,包括Historian数据库、ERP和MES系统以及资产模型。文章详细介绍了Historian数据库的特性、架构分类、数据采集方式及时间序列处理能力,同时探讨了ERP和MES系统的功能与优势,特别是MES在生产执行中的重要作用。资产模型部分结合ISA-95和ISA-88标准,阐述了工业资产的层次化建模方法。此外,文章还分析了各系统之间的协同关系、面临的挑战及应对策略,并展望了未来工业数据管理的发展趋势,如云原生技术、人工智能融合和工业物联网的应用。

pz89012345的博客 144

ruoyi-vue-pro集成magic-api(图文代码)

原先写过简单的集成:了解 magic-api的基本用法 附实战代码 magic-api相关文档推荐阅读:接口鉴权 相关的Java代码推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 【Java项目】实战CRUD的功能整理(持续更新)

码农研究僧的博客 7万+

复旦微FMSH_Procise安装全流程详解:从环境配置到实战避坑指南

通过本文的全流程解析+实战技巧,开发者可快速掌握Procise在复旦微芯片开发中的核心应用。未来随着AKConv轻量级架构(参考往期文章)等创新技术的融入,国产芯片开发生态将更加完善。立即关注本专栏,获取最新多镜像切换指南与Linux SDK实战教程!扩展阅读复旦微在线升级BOOT.BIN全解析H7-TOOL实现复旦微脱机烧录(注:本文实验环境为Windows 10 x64 + FMQL45T-CORE开发板,部分操作可能因版本更新调整)立即行动下载本文配套配置文件:[GitHub链接]加入技术交流群。

QQ_778132974的博客 3238

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Alibaba Spring Cloud 二十一 RocketMQ 延迟消息
下一篇: Alibaba Spring Cloud 二十二 RocketMQ 普通消息
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8358粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值