分布式消息服务RocketMQ是一个低延迟、弹性高可靠、高吞吐、动态扩展、便捷多样的消息中间件服务。
分布式消息服务RocketMQ具有如下特点:
- 兼容开源RocketMQ客户端。
- 提供顺序、延迟、定时、重投、死信、事务消息等功能,更好的适配电商、金融等多样的业务场景。
- 提供消息追踪、消息溯源、链路诊断、死信导出、监控告警等能力,帮助您全方面的了解服务状况,保证业务正常运行。
产品架构
图1 产品架构示意图
示意图说明:
- Broker:负责接收和存储Producer发送的消息,或者转发消息到Consumer。一个Broker由一个主节点和两个备节点组成。
- NameServer:负责接收和存储Broker中的元数据。
- Producer:从NameServer获取元数据,然后将消息发送到Broker。
- Consumer:从NameServer获取元数据,然后从Broker拉取消息。
支持的消息类型
分布式消息服务RocketMQ支持4种消息类型。
- 普通消息:没有特殊功能的消息,区别于延迟消息、顺序消息和事务消息。
- 延迟消息/定时消息:生产者生产消息到分布式消息服务RocketMQ后,消息不会立即被消费,而是延迟到特定时间后才会发送给消费者进行消费。
- 顺序消息:消费者按照消息发送的顺序来消费消息。
- 事务消息:提供类似X/Open XA的分布事务功能,通过事务消息能达到分布式事务的最终一致。
支持的高级特性
分布式消息服务RocketMQ支持4种高级特性。
- 消息过滤:消费者根据分布式消息服务RocketMQ设置的标签对已订阅Topic中的消息进行过滤,达到只消费需要的消息的目的。
- 消息重试:消费者消费某条消息失败后,分布式消息服务RocketMQ根据重试机制将消息重新发送给消费者进行消费。如果重试次数到达设定的最大值时,消息尚未被成功消费,此消息将被发送到死信队列。
分布式消息服务RocketMQ的重试机制如表1所示。
表1 消息重试机制
消费类型 重试时间间隔 最大重试次数 顺序消费 通过suspendTimeMillis设置重试时间间隔。
默认值为1000ms,即1s。
通过消费者的setMaxReconsumeTimes函数配置最大重试次数。若未设置参数值,默认为无限重试。 普通消费 重试时间间隔根据重试次数阶梯变化,如表2所示。 创建消费组时设置。
取值范围:1-16
表2 普通消费重试时间间隔
重试次数 与上次的间隔时间 重试次数 与上次的间隔时间 1 10s 9 7min 2 30s 10 8min 3 1min 11 9min 4 2min 12 10min 5 3min 13 20min 6 4min 14 30min 7 5min 15 1h 8 6min 16 2h
- 延时消息:生产者生产消息到分布式消息服务RocketMQ后,消息不会立即被消费,而是延迟固定时间后才会发送给消费者进行消费。生产者可以指定18个延时等级,每个延时等级对应的时间如表3所示。
表3 延时等级
延时等级 延时时间 延时等级 延时时间 1 1s 10 6min 2 5s 11 7min 3 10s 12 8min 4 30s 13 9min 5 1min 14 10min 6 2min 15 20min 7 3min 16 30min 8 4min 17 1h 9 5min 18 2h
- 定时消息:生产者生产消息到分布式消息服务RocketMQ后,消息不会立即被消费,而是延迟到设定的时间点后才会发送给消费者进行消费。分布式消息服务RocketMQ支持任意时间的定时消息,最大推迟时间可达到1年。同时也支持定时消息的取消。