跳到正文
Elaine Blog
返回

RocketMQ 概念、客户端与消息类型

分布式系统、协调与消息

RocketMQ 面向业务消息提供普通、FIFO、延迟和事务等消息类型。先按失败语义选择类型,再选择 Java 客户端 API;不要把所有 Topic 都配置成最强语义,因为顺序和事务会增加约束与成本。

Table of contents

Open Table of contents

核心模型

Topic 是同类业务消息的逻辑容器,MessageQueue 是存储与传输的最小队列单元,ConsumerGroup 表示共同分担消息的一组消费者。生产者发送成功后,消费者仍可能因为超时或故障收到重复消息。

类型适合必须定义的边界
NORMAL一般异步事件重试与幂等
FIFO同一业务组有先后关系MessageGroup、阻塞策略
DELAY到指定时间后可消费时间精度、最大延迟、取消方式
TRANSACTION本地事务与消息发送协同事务检查、未知状态、幂等

RocketMQ 5.0 概念文档说明 Topic 会关联消息类型。创建资源时应让声明与发送行为一致。

顺序和延迟都不是全局魔法

FIFO 顺序通常限定在同一个 MessageGroup,例如 orderId。不同订单可以并行,同一订单串行。运行实验室分区测试理解稳定业务键:

mvn -Dtest=DistributedMechanismsTest#equalMessageKeysStayInOnePartition test

延迟消息适合订单超时检查、稍后通知等任务,但消费时仍要重新读取当前业务状态,因为订单可能已经支付或取消。高精度定时、大规模可取消任务需要额外评估定时系统或持久工作流。

事务消息通常经历半消息、本地事务、提交/回滚和 Broker 回查。回查方法可能执行多次,必须只读取确定的本地事务状态,不能再次产生扣款副作用。

Java 客户端验收

固定客户端与服务端兼容版本,设置请求超时、最大尝试和凭证;发送时记录业务事件 ID、Topic、MessageGroup 与结果。消费成功后确认,失败按错误类型重试,并对重复投递做幂等。把堆积年龄、失败次数和死信作为业务告警。

下一步

继续阅读08-19 RocketMQ 存储源码与高可用集群,追踪消息怎样落盘和复制。


分享这篇文章:

上一篇
Kafka 日志索引、事务与流处理
下一篇
RocketMQ 存储源码与高可用集群