RocketMQ消息队列产品
前言:RocketMQ消息队列产品的学习,正好到时候学习下CVE-2023-33246
参考文章:https://blog.csdn.net/qq_21040559/article/details/122703715
RocketMQ介绍
官网地址:http://rocketmq.apache.org
RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日,阿里巴巴向 Apache 软件基金会捐赠
RocketMQ,成为Apache孵化项目。2017年9月25日,Apache宣布RocketMQ孵化成为Apache顶级项目(TLP),成为国内首个互联网中间件在 Apache 上的顶级项目。
RocketMQ架构
RocketMQ主要有四大核心组成部分:NameServer、Broker、Producer以及Consumer四部分。
四大核心的运行流程
-
NameServer 先启动
-
Broker 启动时向 NameServer 注册
-
生产者在发送某个主题的消息之前先从 NamerServer 获取 Broker 服务器地址列表(有可能是集群),然后根据负载均衡算法从列表中选择一台Broker 进行消息发送。
-
NameServer 与每台 Broker 服务器保持长连接,并间隔 30S 检测 Broker 是否存活,如果检测到Broker 宕机(使用心跳机制, 如果检测超120S),则从路由注册表中将其移除。
-
消费者在订阅某个主题的消息之前从 NamerServer 获取 Broker 服务器地址列表(有可能是集群),但是消费者选择从 Broker 中 订阅消息,订阅规则由 Broker 配置决定
NameServer
Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
NameServer是整个RocketMQ的"大脑",它是RocketMQ的服务注册中心,所以RocketMQ需要先启动NameServer再启动Rocket中的Broker。
这边为什么说是大脑呢,因为名称服务器(NameServer)用来保存 Broker 相关元信息并给 Producer 和 Consumer 查找Broker 信息。NameServer 被设计成几乎无状态的,可以横向扩展,节点之间相互之间无通信,通过部署多台机器来标记自己是一个伪集群。
为什么先启动NameServer再启动Broker呢,每个Broker在启动的时候会到NameServer注册,Producer在发送消息前会根据Topic到NameServer获取到Broker的路由信息,进而和Broker取得连接。Consumer也会定时获取Topic的路由信息。
这边简单的理解其实就是NameServer保存了Broker的信息,然后提供给Producer和Consumer相关的Broker信息。
NameServer 与每台 Broker 服务保持长连接,并间隔 30S 检查 Broker 是否存活,如果检测到Broker 宕机,则从路由注册表中将其移除,这样就可以实现 RocketMQ 的高可用。
Broker
消息服务器(Broker)是消息存储中心,主要作用是接收来自Producer的消息并存储,Consumer从这里取得消息。它还存储与消息相关的元数据,包括用户组、消费进度偏移量、队列信息等。从部署结构图中可以看出Broker有Master和Slave两种类型。
知识点:Master既可以写又可以读,Slave不可以写只可以读,相当于只能同步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)