什么是消息队列 RocketMQ?
程序员文章站
2024-03-19 16:24:28
...
消息队列 RocketMQ ,为分布式应用系统提供异步解耦、削峰填谷的能力,同时具备海量消息堆积、高吞吐、可靠重试等互联网应用所需的特性。
消息队列 RocketMQ 提供了基于 TCP 和 HTTP协议的多种编程语言的接入方式以及多维度的管理工具,同时针对不同的应用场景提供了一系列的特色功能。
多协议支持
- 支持 HTTP 协议:采用 RESTful标准,方便易用,快速接入,跨网络能力强。
- 支持 TCP 协议:区别于 HTTP 简单的接入方式,提供更为专业、可靠、稳定的 TCP 协议的 SDK 接入。
- 支持 STOMP 协议:类似于 HTTP 的纯文本的协议机制,常用于脚本语言(如 Ruby、Python、Perl)和消息队列 RocketMQ Broker 进行轻量级交互。
特色功能
- 事务消息:实现类似 X/Open XA 的分布事务功能,以达到事务最终一致性状态。
- 定时(延时)消息:允许消息生产者指定消息进行定时(延时)投递,最长支持 40 天。
- 大消息:支持最大 4 MB 消息。
- 消息轨迹:通过消息轨迹,能清晰定位消息从发布者发出,经由消息队列 RocketMQ 服务端,投递给消息订阅者的完整链路,方便定位排查问题。
- 广播消费:允许同一个 Group ID 所标识的所有 Consumer 都各自消费某条消息一次。
- 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。
- 重置消费进度:根据时间重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。
- 死信队列:将无法正常消费的消息储存到特殊的死信队列供后续处理。
- 全球消息路由:用于全球不同地域之间的消息同步复制,保证地域之间的数据一致性。
Topic
消息主题,一级消息类型,通过 Topic 对消息进行分类。
Message
消息,消息队列中信息传递的载体。
Message ID
消息的全局唯一标识,由消息队列 RocketMQ 系统自动生成,唯一标识某条消息。
Message Key
消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。
Tag
消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类。
Producer
消息生产者,也称为消息发布者,负责生产并发送消息。
Producer 实例
Producer 的一个对象实例,不同的Producer实例可以运行在不同进程内或者不同机器上Producer实例线程安全,
可在同一进程内多线程之间共享。
Consumer
消息消费者,也称为消息订阅者,负责接收并消费消息。
Consumer 实例
Consumer 的一个对象实例,不同的Consumer实例可以运行在不同进程内或者不同机器上
Group
一类 Producer 或 Consumer,这类 Producer 或 Consumer通常生产或消费同一类消息,
且消息发布或订阅的逻辑一致。
Group ID
Group 的标识。
Exactly-Once 投递语义
Exactly-Once 投递语义是指发送到消息系统的消息只能被消费端处理且仅处理一次,即使生产端重试消息发送导致某消息重复投递,该消息也在消费端也只被消费一次。
集群消费
一个 Group ID 所标识的所有 Consumer 平均分摊消费消息。例如某个 Topic 有 9 条消息,一个 Group ID 有 3 个Consumer实例,那么在集群消费模式下每个实例平均分摊,只消费其中的 3 条消息。
广播消费
一个 Group ID 所标识的所有 Consumer 都会各自消费某条消息一次。例如某个 Topic 有 9 条消息,一个 Group ID 有 3 个 Consumer实例,那么在广播消费模式下每个实例都会各自消费 9 条消息。
定时消息
Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到Consumer进行消费,该消息即定时消息。
延时消息
Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer进行消费,该消息即延时消息。
事务消息
消息队列 RocketMQ 提供类似 X/Open XA 的分布事务功能,通过消息队列 RocketMQ 的事务消息能达到分布式事务的最终一致。
顺序消息
消息队列 RocketMQ 提供的一种按照顺序进行发布和消费的消息类型, 分为全局顺序消息和分区顺序消息。
全局顺序消息
对于指定的一个 Topic,所有消息按照严格的先入先出(FIFO)的顺序进行发布和消费。
分区顺序消息
对于指定的一个 Topic,所有消息根据 sharding key 进行区块分区。同一个分区内的消息按照严格的 FIFO 顺序进行发布和消费。Sharding key 是顺序消息中用来区分不同分区的关键字段,和普通消息的 key是完全不同的概念。
消息堆积
Producer 已经将消息发送到消息队列 RocketMQ 的服务端,但由于 Consumer 消费能力有限,未能在短时间内将所有消息正确消费掉,此时在消息队列 RocketMQ 的服务端保存着未被消费的消息,该状态即消息堆积。
消息过滤
消费者可以根据消息标签(Tag)对消息进行过滤,确保消费者最终只接收被过滤后的消息类型。消息过滤在消息队列 RocketMQ 的服务端完成。
消息轨迹
在一条消息从生产者发出到订阅者消费处理过程中,由各个相关节点的时间、地点等数据汇聚而成的完整链路信息。通过消息轨迹,您能清晰定位消息从生产者发出,经由消息队列 RocketMQ 服务端,投递给消息消费者的完整链路。
重置消费位点
以时间轴为坐标,在消息持久化存储的时间范围内(默认 3天),重新设置消息消费者对其订阅
Topic 的消费进度。
设置完成后订阅者将接收设定时间点之后由消息生产者发送到消息队列 RocketMQ服务端的消息。
死信队列
死信队列用于处理无法被正常消费的消息。当一条消息初次消费失败,消息队列 RocketMQ会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息此时,消息队列 RocketMQ不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊列中。消息队列 RocketMQ 将这种正常情况下无法被消费的消息称为死信消息(Dead-Letter Message)将存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。
消息路由
消息路由常用于不同地域之间的消息同步,保证地域之间的数据一致性。
上一篇: 原生python实现knn分类算法
下一篇: Spring-AOP 流程切面