认识RocketMQ及Windows下RocketMQ的安装和可视化控制台启动

386 阅读6分钟

初识RocketMQ

我们平时使用一些体育新闻软件,会订阅自己喜欢的一些球队板块,当有作者发表文章到相关的板块,我们就能收到相关的新闻推送。

发布-订阅(Pub/Sub)是一种消息范式,消息的发送者(称为发布者、生产者、Producer)会将消息直接发送给特定的接收者(称为订阅者、消费者、Comsumer)。而RocketMQ的基础消息模型就是一个简单的Pub/Sub模型。

生产者

负责生产消息、发布消息的角色,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。 Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。

消费者

负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。

  • 支持以推(push),拉(pull)两种模式对消息进行消费。
  • 同时也支持集群方式和广播方式的消费。
  • 提供实时消息订阅机制,可以满足大多数用户的需求。

RocketMQ的基础消息模型,一个简单的Pub/Sub模型

RocketMQ概念模型

基本消息系统模型

上图就是一个基本的消息系统模型,包括生产者 (Producer)消费者 (Consumer) ,中间进行基于消息主题(Topic) 的消息传送。

基于主题的系统中,消息被发布到主题或命名通道上。消费者将收到其订阅主题上的所有消息,生产者负责定义订阅者所订阅的消息类别。这是一个基础的概念模型,而在实际的应用中,结构会更复杂。例如为了支持高并发和水平扩展,中间的消息主题需要进行分区,同一个Topic会有多个生产者,同一个信息会有多个消费者,消费者之间要进行负载均衡等。

RocketMQ 扩展后的消息模型

RocketMQ基本模型

扩展的消息系统模型

上图就是一个扩展后的消息模型,包括两个生产者两个消息Topic,以及两组消费者 Comsumer

存储消息Topic的 代理服务器Broker ),是实际部署过程对应的代理服务器。

  • 为了消息写入能力的水平扩展,RocketMQ 对 Topic进行了分区,这种操作被称为队列(MessageQueue)。
  • 为了消费能力的水平扩展,ConsumerGroup的概念应运而生。

信息

  • 相同的ConsumerGroup下的消费者主要有两种负载均衡模式,即广播模式,和集群模式(图中是最常用的集群模式)。
  • 在集群模式下,同一个 ConsumerGroup 中的 Consumer 实例是负载均衡消费,如图中 ConsumerGroupA 订阅 TopicA,TopicA 对应 3个队列,则 GroupA 中的 Consumer1 消费的是 MessageQueue 0和 MessageQueue 1的消息,Consumer2是消费的是MessageQueue2的消息。
  • 在广播模式下,同一个 ConsumerGroup 中的每个 Consumer 实例都处理全部的队列。需要注意的是,广播模式下因为每个 Consumer 实例都需要处理全部的消息,因此这种模式仅推荐在通知推送、配置同步类小流量场景使用。

名字服务器 NameServer

NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现。

主要包括两个功能:

  • Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;
  • 路由信息管理,每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。Producer和Consumer通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。

NameServer通常会有多个实例部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,客户端仍然可以向其它NameServer获取路由信息。

代理服务器 Broker

Broker主要负责消息的存储、投递和查询以及服务高可用保证。

NameServer几乎无状态节点,因此可集群部署,节点之间无任何信息同步。Broker部署相对复杂。

在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。

部署模型小结

  • 每个 Broker 与 NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。
  • Producer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取Topic路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态。
  • Consumer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从Slave订阅消息。

安装RocketMQ

RocketMQ下载地址

如需查看每个版本有哪些特性可以查看这篇文章:https://blog.csdn.net/jianjun_fei/article/details/135120569

进入下载界面后选择Binary下载 image.png

下载后得到一个zip压缩包 image.png

解压

image.png

配置环境变量

此电脑->属性->高级系统设置->环境变量

添加下列信息

image.png

启动

打开cmd命令行窗口,进入到文件的bin目录下

启动NameServer

输入:mqnamesrv.cmd image.png

启动Broker

输入:mqbroker.cmd -n 127.0.0.1:9876 image.png

完成

这样我们Windows下就完成了RocketMQ的安装

安装可视化控制台

还是进入之前的下载界面滑动到最底下

直接下载

image.png 下载后得到zip压缩文件 image.png

解压

image.png

解压完后直接用idea打开

image.png

更改配置文件

image.png

启动

使用命令打包:mvn clean package -Dmaven.test.skip=true

在target目录下启动命令:java -jar jar包名称 java -jar rocketmq-dashboard-1.0.0.jar

访问

启动后浏览器访问:localhost:端口号

端口号在这里看:

4d968b433f013f14ac322dba7b8f910.png

输入后即可成功访问

参考文档: rocketmq.apache.org/zh/docs/4.x…