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

基于smart_rtmp直播,最简单的部署手册

版本号 添加内容 修改时间 V1.0 新建 2021年12月30日 V1.1 增加网页播放 2021年12月31日 V1.2 增加是否可以多流和测试数据 2022年1月5日 目录 一、软件储备 1.推流软件:OBS 2.服务器流媒体软件:smart_rtmp 3.播放软件:Pot...

qq_28768477的博客 1万+

AD9371 官方例程构建及单音信号收发

项目构建基本流程和AD9361差不多,由于官方使用的ZCU102,记录下移植遇到的一些问题最终接收到正确的正弦波Errors: 0Errors: 0Errors: 0Errors: 0AD9361。

weixin_44630490的博客 2973

【Unity实战100例】Unity循环UI界面切换卡片功能

功能包括:可以设置半径,高度,速度,元素数量用户可以根据自己的实际需求接入 制作思路:创建每个元素对应的虚拟点,通过旋转管理这些虚拟点,然后把旋转信息和位置信息同步给实际的元素

纯技术流日常开发商业开发记录总结等 7717

利用 RSAU_LOG_API 把 SAP 安全审核日志接入企业 SIEM 的完整指南

在 SAP 世界里,安全审核日志(Security Audit Log,简称 SAL)是审计和合规的核心基础设施之一。系统会在后台把安全相关的关键事件记录下来,比如:(用户登录与登录失败用户锁定、解锁权限对象或角色变更远程调用(RFC)相关活动关键事务码的启动程序直接执行、批处理作业相关的敏感操作传统 ABAP 系统里,这些日志会写到本地应用服务器上的审计文件中(背后对应类似表RSAUENTR2的结构),包含事件标识、客户端、用户、终端、事务码、时间戳等信息。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 161

19、利用PostGIS进行空间分析:更高效的矢量分析方法

本文介绍了如何利用PostGIS进行高效灵活的矢量空间分析,重点探讨了在选址安静住宅场景中使用缓冲区和距离测量两种方法的实现与优化。通过QGIS与PostGIS结合,演示了数据上传、CTE应用、ST_Intersects与ST_Distance函数对比,并深入分析了横向子查询在提升查询性能和代码可读性方面的优势。文章还比较了不同方法的适用场景,并以房地产开发选址为例展示了完整分析流程,最后总结了PostGIS在空间分析中的强大能力与未来应用前景。

d3e4f的博客 92

c++对halcon的动态链接库dll封装及调用(细细讲)

本文详细介绍了将Halcon图像处理算法封装为C++动态链接库(DLL)的完整流程,包括7个关键步骤:1)封装Halcon函数并导出CPP文件;2)在C++项目中配置Halcon环境(包含目录、库目录设置);3)验证Halcon代码;4)创建DLL项目并进行环境配置;5)编辑DLL并导出生成文件(.dll、.lib、.h);6)在主项目中配置DLL调用环境;7)编写测试代码验证功能。通过这个流程实现了Halcon算法的模块化封装和复用,文中提供了具体的配置路径和代码示例,重点说明了环境配置细节和文件结构安排

Tianwen_running的博客 966

YOLOv13添加DRB模块map暴涨12.33!准确率提升8.56!召回率提升15.66

本文介绍了在YOLOv13模型中添加DRB模块的改进方法。实验结果显示,添加DRB模块后模型性能显著提升,mAP暴涨12.33%,准确率提升8.56%。文章详细说明了移植过程,包括创建yolov13-DRB.yaml配置文件、修改tasks.py和__init__.py文件,以及引入UniRepLKNet模块的具体实现。其中重点描述了GRNwithNHWC、NCHWtoNHWC等核心组件的实现细节,并提供了完整的模型结构配置代码。这些改进使得YOLOv13模型在保持原有架构优势的同时,获得了更强大的特征提取

FJN110的博客 2819

C++11、C++14 和 C++17 标准新特性详解

特性C++11C++14C++17auto类型推导✅范围 for 循环✅Lambda 表达式✅✅✅智能指针✅移动语义✅nullptr✅统一初始化{}✅✅constexpr✅✅✅✅数字分隔符✅结构化绑定✅✅✅文件系统库✅。

h a 6 6 6 c k 为 你解决复杂难题! 440

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 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、付费专栏及课程。

余额充值