Apache RocketMQ混合消息类型完整指南:10个关键技巧掌握普通/顺序/事务消息
Apache RocketMQ混合消息类型完整指南:10个关键技巧掌握普通/顺序/事务消息
【免费下载链接】rocketmqApache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications.项目地址: https://gitcode.com/gh_mirrors/ro/rocketmq
Apache RocketMQ是一款云原生消息和流处理平台,专为构建事件驱动型应用而设计。本文将详细介绍如何高效使用RocketMQ的三种核心消息类型——普通消息、顺序消息和事务消息,并分享10个实用技巧帮助新手快速上手。
一、RocketMQ消息类型概述 📊
RocketMQ提供三种主要消息类型,满足不同业务场景需求:
- 普通消息:最基础的消息类型,支持高吞吐和低延迟,适用于大多数无需严格顺序保证的场景
- 顺序消息:保证消息按发送顺序被消费,分为全局顺序和分区顺序两种模式
- 事务消息:支持分布式事务,确保本地事务与消息发送的原子性,实现最终一致性
RocketMQ架构图:展示了消息从生产到消费的完整流程
二、普通消息使用技巧 💡
技巧1:选择合适的发送方式
普通消息支持三种发送方式,根据业务需求选择:
- 同步发送:发送方阻塞直到收到Broker确认,适用于重要消息
- 异步发送:发送方不阻塞,通过回调处理结果,适用于高吞吐场景
- 单向发送:只发送不等待确认,适用于日志收集等非关键场景
技巧2:利用BrokerContainer提高可用性
在二副本或三副本部署模式下,单个节点宕机不会影响普通消息的收发:
二副本对等部署情况下,每个节点都会有一主一备,资源利用率均等。另外假设图中Node1宕机,由于Node2的broker_2可读可写,broker_1可以备读,因此普通消息的收发不会收到影响,单节点的高可用能力得到了增强。
三、顺序消息使用技巧 🔄
技巧3:理解顺序消息原理
顺序消息通过控制消息发送到同一个队列并按顺序消费来保证顺序:
顺序消费的原理解析,在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。
技巧4:正确设置Sharding Key
顺序消息通过Sharding Key进行分区,相同Sharding Key的消息会进入同一队列:
对于指定的一个 Topic,所有消息根据 sharding key 进行区块分区。同一个分区内的消息按照严格的 FIFO 顺序进行发布和消费。Sharding key 是顺序消息中用来区分不同分区的关键字段,和普通消息的 Key 是完全不同的概念。
技巧5:合理配置锁模式
消费顺序消息时,通过lockInStrictMode参数控制锁队列行为:
lockInStrictMode:消费端消费顺序消息锁队列时是否使用严格模式,默认为false。严格模式即对单个队列而言,需锁副本组的大多数成员(quorum原则)均成功才算锁成功,非严格模式即锁任意一副本成功就算锁成功。当对消息顺序性高于可用性时,需将该参数设置为false。
顺序消息设计图:展示了消息分区和顺序消费机制
四、事务消息使用技巧 📈
技巧6:理解事务消息流程
RocketMQ事务消息基于2PC思想实现,包含正常流程和补偿流程:
Apache RocketMQ在4.3.0版中已经支持分布式事务消息,这里RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。
事务消息流程包括:
- 发送half消息(对用户不可见)
- 执行本地事务
- 根据事务结果提交或回滚消息
- 超时情况下进行事务回查
技巧7:注意事务消息限制
使用事务消息时需了解以下限制:
事务消息不支持延时消息和批量消息。事务消息的生产者 GroupName 不能与其他类型消息的生产者 GroupName 共享。与其他类型的消息不同,事务消息允许反向查询、MQ服务器能通过它们的生产者 GroupName 查询到生产者。
技巧8:正确处理事务状态
事务消息有三种状态:
- 提交状态:事务成功,消息对消费者可见
- 回滚状态:事务失败,消息被丢弃
- 中间状态:需要回查事务状态
事务消息设计图:展示了事务消息的完整处理流程
五、通用最佳实践 🚀
技巧9:合理设置生产者组
生产者组对于事务消息尤为重要:
生产者的分组名称。相同的分组名称表明生产者实例在概念上归属于同一分组。这对事务消息十分重要,如果原始生产者在事务之后崩溃,那么broker可以联系同一生产者分组的不同生产者实例来提交或回滚事务。
技巧10:使用官方示例快速上手
RocketMQ提供了丰富的示例代码,涵盖各种消息类型的使用方法:
样例(Example):介绍RocketMQ的常见用法,包括基本样例、顺序消息样例、延时消息样例、批量消息样例、过滤消息样例、事务消息样例等。
六、总结
通过本文介绍的10个关键技巧,您已经掌握了RocketMQ普通消息、顺序消息和事务消息的核心使用方法。 RocketMQ的消息类型设计满足了不同业务场景的需求,从简单的消息传递到复杂的分布式事务,都能提供可靠高效的解决方案。
要深入学习RocketMQ,建议参考官方文档和示例代码,结合实际业务场景进行实践。祝您在RocketMQ的使用之旅中取得成功!
【免费下载链接】rocketmqApache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications.项目地址: https://gitcode.com/gh_mirrors/ro/rocketmq
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
