目录
1:RocketMQ安装
1.1:下载安装包解压
1.2:修改运行配置
1.3:运行RocketMQ
1.3.1:启动NameServer
1.3.2:启动Broker
1.4:消息收发
1.5:服务关闭
2:RocketMQ模块介绍
2.1: 名字服务器 NameServer
2.2:代理服务器 Broker
2.3:生产者
2.4:消费者
1:RocketMQ安装
1.1:下载安装包解压
在 RocketMQ · 官方网站 | RocketMQ 的官网下载安装包,分为4.x和5.x两个版本,这次使用4.x版本,rocketmq-all-4.9.4-bin-release.zip。将zip解压之后。
1.2:修改运行配置
因为Rocket的是Java开发的,实际上就是一个Java项目,Java项目运行的需要虚拟机内存。
默认的NameServer(注册中心) JVM内存配置 -Xms4g -Xmx4g -Xmn2g
默认的Broker(数据管道) JVM内存配置 -server -Xms8g -Xmx8g -Xmn4g
这两个内存都是很大的,如果服务器内存不够,启动不了,所以在启动之前务必根据自己的服务器内存大小,来重新配置一下。当然服务器配置足够高另说。
1.3:运行RocketMQ
1.3.1:启动NameServer
安装完RocketMQ包后,我们启动NameServer
### 启动namesrv
$ nohup sh bin/mqnamesrv &
### 验证namesrv是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
我们可以在namesrv.log 中看到 'The Name Server boot success..', 表示NameServer 已成功启动。
1.3.2:启动Broker
### 先启动broker
$ nohup sh bin/mqbroker -n localhost:9876 &
### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
$ tail -f ~/logs/rocketmqlogs/Broker.log
The broker[broker-a,192.169.1.2:10911] boot success...
NameServer成功启动后,我们启动Broker
1.4:消息收发
在进行消息收发之前,我们需要告诉客户端NameServer的地址,RocketMQ有多种方式在客户端中设置NameServer地址,这里我们利用环境变量NAMESRV_ADDR
发送消息
$ export NAMESRV_ADDR=localhost:9876
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
接收消息
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
1.5:服务关闭
完成实验后,我们可以通过以下方式关闭服务
$ sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
$ sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
2:RocketMQ模块介绍
在上边我们首先启动了NameServer,然后启动了broker。然后生产者发送消息,消费者接收消息。
2.1: 名字服务器 NameServer
NameServer的作用就是一个简单的Topic的路由注册中心,支持topic的注册和发现
主要包括两个功能:
broker的管理,NameServer接受broker的单机或者集群信息注册信息,并且保存下来作为路由信息的基本数据,同时发送心跳检测机制,检测broker是否存活。
路由信息管理,每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。生产者和消费者通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。
NameServer通常是多机器不是,他们之间不会进行互相通信,每一个broker启动的时候,都需要向NameServer注册自己的信息,所有每一个NameServer都保存了所有的broker信息,所以当某一个NameServer挂了,客户端仍然可以向其它NameServer获取路由信息。
2.2:代理服务器 Broker
代理服务器也是多机器部署的,他们的作用就是存储消息、查询消息、保证高可用。因为NameServer几乎无状态节点,因此可集群部署,节点之间无任何信息同步。Broker部署相对复杂。
在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。
2.3:生产者
生产者是最简单的,跟broker是无状态链接,只需要向指定的topic种发送消息。Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。
2.4:消费者
消费者消费需要和NameServer建立长连接,且定时向 Master、Slave发送心跳,定期获取topic中的路由信息。
消费者获取消息
支持以推(push),拉(pull)两种模式对消息进行消费。
同时也支持集群方式和广播方式的消费。
提供实时消息订阅机制,可以满足大多数用户的需求。