RocketMQ 是一款 低延迟、高并发、高可用、高可靠的分布式消息中间件。
RocketMQ 架构
- Name Server:注册中心。
- Broker:消息中转角色,负责存储消息,转发消息。Broker启动后需要将自己注册到Name Server,随后每隔30s定期向Name Server上报Topic路由信息。分为 Master Broker 和 Slave Broker,两者是一对多关系。
- 生产者:与 Name Server 集群中的其中一个节点(随机)建立长链接,定期从 Name Server 读取 Topic 路由信息。向提供 Topic 服务的 Master Broker 建立长链接,且定时向 Master Broker 发送心跳。生产者只能给 Master Broker 发送消息。
- 消费者:与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息。向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。消费者既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。
其他概念:
- Topic:消息主题,用于将一类的消息进行归类。
- Message:Message是消息的载体。一个 Message 必须指定 Topic。
- Tag:Tag可以被认为是对 Topic 进一步细化。可以用Tag来对消息进行过滤。
- Group:一类生产者或消费者,这类生产者或消费者有相同的Topic,通常生产或消费同一类消息。
相关知识
-
RocketMQ订阅规则
集群消费:同一个Group ID所标识的所有Consumer平均分摊消费消息。
广播消费:同一个Group ID所标识的所有Consumer都会各自消费某条消息一次。 -
获取消息的方式
(1)push
概念:RocketMQ主动把消息推送给消费者。底层还是pull,只是RocketMQ封装了长轮询的方式。
优点:RocketMQ处理了获取消息的细节,使用起来比较简单方便。
缺点:只能以一定的频率去推送消息,不够灵活。
(2)pull
概念:消费者主动获取消息。
优点:灵活性较大,根据消费者的消费能力去消费消息。
缺点:使用起来复杂度高。