RocketMQ实战教程之常见概念和模型
常见概念与模型
官方文档: https://rocketmq.apache.org/zh/docs/introduction/02concepts
1 常见概念[重点]
消息(Message)
消息
是 Apache RocketMQ 中的最小数据传输单元
。生产者将业务数据的负载和拓展属性包装成消息发送到服务端,服务端按照相关语义将消息投递到消费端进行消费。
通俗理解: 消息就是自己想要传递业务数据,可以是字符串也可以是JSON格式.
主题(Topic)
主题 是Apache RocketMQ 中消息传输和存储的顶层容器
,用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。
通俗理解: 就是用来给发送消息进行分类。一个消息发送者可以发送消息到一个或多个主题,一个消息消费者也可以消费一个或多个主题的消息。比如说订单消息,库存类的消息分别为一个主题,这样设计比较符合业务场景。
消息类型(MessageType)
Apache RocketMQ 支持的消息类型有普通消息、顺序消息、事务消息和定时/延时消息。
注意:Apache RocketMQ 从5.0版本开始,支持强制校验消息类型,即每个主题Topic只允许发送一种消息类型的消息,这样可以更好的运维和管理生产系统,避免混乱。但同时保证向下兼容4.x版本行为,强制校验功能默认开启。
消息队列(MessageQueue)
队列
是 Apache RocketMQ 中消息存储和传输的实际容器
,也是消息的最小存储单元
。 Apache RocketMQ 的所有主题都是由多个队列组成
,以此实现队列数量的水平拆分和队列内部的流式存储。队列通过QueueId来做唯一标识和区分。
通俗理解: 就是 topic 的分区,用来更好实现队列数量的水平拆分和队列内部的流式存储。(水平拆分意味着可以通过增加更多的队列来提高系统的并行处理能力,而流式存储则是指队列可以持续接收和发送消息,适用于高吞吐量的场景。)简单来说就是一次性可以往多个队列发送消息以及消费消息提升了性能.
消费者分组(ConsumerGroup)
消费者分组是Apache RocketMQ 系统中承载多个消费行为一致的消费者的负载均衡分组
。和消费者不同,消费者分组并不是运行实体,而是一个逻辑资源。在 Apache RocketMQ 中,通过消费者分组内初始化多个消费者实现消费性能的水平扩展以及高可用容灾。顾名思义就是给消费者进行分组消费不同的消息队列
订阅关系(Subscription)
Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置
。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。
2 模型[重点]
参考官网: https://rocketmq.apache.org/zh/docs/domainModel/01main
2.6 参考约束与建议
官方文档: https://rocketmq.apache.org/zh/docs/introduction/03limits
参数 |
建议范围 |
说明 |
|
字符建议:字母az或AZ、数字0~9以及下划线()、短划线(-)和百分号(%)。 长度建议:1~64个字符。 系统保留字符:Topic名称不允许使用以下保留字符或含有特殊前缀的字符命名。 保留字符: TBW102 *BenchmarkTest* SELF_TEST_TOPIC *OFFSET_MOVED_EVENT* SCHEDULE_TOPIC_XXXX *RMQ_SYS_TRANS_HALF_TOPIC* RMQ_SYS_TRACE_TOPIC *RMQ_SYS_TRANS_OP_HALF_TOPIC 特殊前缀:* rmq_sys %RETRY% %DLQ% rocketmq-broker- |
Topic命名应该尽量使用简短、常用的字符,避免使用特殊字符。特殊字符会导致系统解析出现异常,字符过长可能会导致消息收发被拒绝。 |
|
字符建议:支持字母az或AZ、数字0~9以及下划线()、短划线(-)和百分号(%)。 长度建议:1~64个字符。 系统保留字符:ConsumerGroup不允许使用以下保留字符或含有特殊前缀的字符命名。 保留字符: *DEFAULT_CONSUMER* DEFAULT_PRODUCER *TOOLS_CONSUMER* FILTERSRV_CONSUMER *__MONITOR_CONSUMER* CLIENT_INNER_PRODUCER *SELF_TEST_P_GROUP* SELF_TEST_C_GROUP *CID_ONS-HTTP-PROXY* CID_ONSAPI_PERMISSION *CID_ONSAPI_OWNER* CID_ONSAPI_PULL *CID_RMQ_SYS_TRANS* 特殊字符 * CID_RMQ_SYS * CID_HOUSEKEEPING |
无。 |
|
默认值:3000毫秒。 取值范围:该参数为客户端本地行为,取值范围建议不要超过30000毫秒。 |
请求超时时间是客户端本地同步调用的等待时间,请根据实际应用设置合理的取值,避免线程阻塞时间过长。 |
|
默认值:不超过4 MB。不涉及消息压缩,仅计算消息体body的大小。 取值范围:建议不超过4 MB。 |
消息传输应尽量压缩和控制负载大小,避免超大文件传输。若消息大小不满足限制要求,可以尝试分割消息或使用OSS存储,用消息传输URL。 |
|
字符限制:所有可见字符。 长度建议:属性的Key和Value总长度不超过16 KB。 系统保留属性:不允许使用以下保留属性作为自定义属性的Key。 保留属性Key |
无。 |
|
字符限制:所有可见字符。 长度建议:1~64字节。 |
MessageGroup是顺序消息的分组标识。一般设置为需要保证顺序的一组消息标识,例如订单ID、用户ID等。 |
|
默认值:3次。 取值范围:无限制。 |
消息发送重试是客户端SDK内置的重试策略,对应用不可见,建议取值不要过大,避免阻塞业务线程。 如果消息达到最大重试次数后还未发送成功,建议业务侧做好兜底处理,保证消息可靠性。 |
|
默认值:16次。 |
消费重试次数应根据实际业务需求设置合理的参数值,避免使用重试进行无限触发。重试次数过大容易造成系统压力过量增加。 |