RocketMQ 是一个开源的分布式消息中间件,由阿里巴巴公司于 2012 年开始开发。它具有高可用性、高性能、可靠性强、功能丰富等特点,广泛应用于电商、金融、物流、互联网和大数据等领域。

spring boot rocketmq生产 rocketmq结构_java-rocketmq


spring boot rocketmq生产 rocketmq结构_分布式_02

RocketMQ 支持生产者和消费者的负载均衡、数据分片、数据重试、数据过期等特性,同时还支持消息的事务、顺序消费、定时消费、广播消费等高级特性。RocketMQ 的消息存储采用了基于 CommitLog 的方式,保证消息的可靠存储和高效读取。

RocketMQ 的整体架构分为 Producer、Broker 和 Consumer 三个组件,其中 Producer 负责消息的生产,Broker 负责消息的存储和转发,Consumer 负责消息的消费。
通常情况下,生产者(Producer)和消费者(Consumer)是运行在用户自己的机器上,而消息中间件(Broker)则是运行在独立的服务器或者集群上,它们分别承担着不同的角色和功能。

Producer是消息的生产者,它负责产生消息并发送到Broker,通常是通过网络协议(如TCP、HTTP等)与Broker进行通信。Consumer是消息的消费者,它从Broker中订阅消息并进行处理,通常也是通过网络协议与Broker进行通信。

而Broker则是消息队列系统的核心组件,负责接收Producer发送的消息并存储到相应的Topic中,同时也负责将存储在Topic中的消息转发给订阅该Topic的Consumer。Broker通常会采用分布式的架构来保证高可用性和可扩展性,它可以部署在单台或多台服务器上,也可以以集群的形式运行。

因此,在RocketMQ中,Producer和Consumer通常运行在用户的机器上,而Broker则运行在消息队列的机器上,它们共同构成了一个完整的消息队列系统。

消息生产:Producer 将消息发送到指定的 Topic,然后根据消息的类型和发送策略选择发送方式,可以是同步发送、异步发送或者是单向发送。

消息存储:Broker 接收到消息后,首先将消息存储到 CommitLog 中,然后再将消息存储到消息队列中。消息队列分为多个主题,每个主题下有多个消息队列,每个消息队列又分为多个消息分片,消息存储采用了写时复制技术,保证了消息的可靠存储和高效读取。
消息转发:Broker 根据订阅关系将消息转发给订阅者。消息订阅关系可以是广播模式或者是集群模式。在广播模式下,每个订阅者都会收到同样的消息;在集群模式下,每个消费者组只有一个消费者能够消费同一个消息队列的消息。

当生产者(Producer)将消息发送给Broker时,Broker会将消息存储到相应的Topic中。具体过程如下:

Producer通过网络协议连接到Broker,并发送消息到指定的Topic。

Broker接收到消息后,将消息存储到相应的队列(Queue)中。每个队列代表了一个消息流,Broker将所有订阅该Topic的消息都存储到相应的队列中。

Consumer通过网络协议连接到Broker,并订阅指定的Topic。当有新消息到达时,Broker会将消息转发给所有订阅该Topic的Consumer。这个过程称为消息推送(Push)。

Consumer从Broker中拉取(Pull)消息并进行处理。Consumer可以控制从Broker中拉取的消息数量,以及每次拉取的最大字节数等。

Consumer处理完消息后,向Broker发送确认消息(Acknowledge),告诉Broker该消息已被成功处理。这个过程称为消息确认(Ack)。

Broker收到确认消息后,会将该消息从队列中删除。

消息消费:Consumer 从 Broker 订阅指定的主题和消息队列,然后根据订阅模式进行消息的消费,可以是顺序消费或者是并发消费。在顺序消费模式下,Consumer 会按照消息的顺序依次消费消息,而在并发消费模式下,多个 Consumer 可以同时消费同一个消息队列的消息。

https://github.com/apache/rocketmq https://rocketmq.apache.org/version