准备

需要先安装以下软件

  1. 64bit OS, Linux/Unix/Mac is recommended;

  2. 64bit JDK 1.8+;

  3. Maven 3.2.x

  4. Git

系统与JDK的安装都比较熟悉,不再说明.

安装maven

1.下载maven

http://maven.apache.org/download.cgi

2.上传解压

3.配置环境变量

vi /etc/profile然后还需要 配置环境变量.

1
2
3
#在适当的位置添加
export M2_HOME=/usr/local/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

安装RocketMQ

1.下载

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip

2.上传解压并mvn编译

1
2
3
4
5
6
7
8
#cd /home/soft/
#unzip rocketmq-all-4.2.0-source-release.zip

#Maven安装
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/apache-rocketmq

#备注:服务器上不了网,MVN下载不了依赖的情况下,直接下载官方编译后的代码即可.

3. 简单使用与测试可用与否

  1. 开始nameserver
1
2
3
4
nohup sh bin/mqnamesrv & 

tail -f ~/logs/rocketmqlogs/namesrv.log
#The Name Server boot success...
  1. 开始broker
1
2
3
4
 nohup sh bin/mqbroker -n localhost:9876 &

 tail -f ~/logs/rocketmqlogs/broker.log
 #The broker[%s, 172.30.30.233:10911] boot success...
  1. 发送与接收消息

在发送与接收消息之前,我们需要告诉客户端nameserver的地址,rocketMQ提供多种方式来配置,简单的可以配置一个环境变量.

1
2
3
4
5
6
7
 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. 关闭
1
2
3
4
5
6
7
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

概念说明

名称服务NameServer

NameServer是一个功能齐全的服务器,主要包括两个功能:
⊙broker 管理,nameserver
接受来自broker集群的注册信息并提供心跳来检测他们是否可用.
⊙路由管理
每一个nameserver都持有关于broker集群和队列的全部路由信息,用来向客户端提供查询.

代理服务集群 Broker Cluster

Broker通过提供轻量级主题和队列机制来处理消息存储.它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),提供了极强的峰值处理里能力和按照时间顺序存储数以百万记的消息存储能力,此外,代理提供了灾难恢复.丰富的度量统计和警报机制,这些都是在传统的消息传递系统中缺乏的.

broker server负责消息的存储传递,消息查询,保证高可用等等.

集群部署说明

Broker的常用配置模式

IMG_256

部署图例

IMG_256

Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步.

Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave.Master也可以部署多个.每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server.

Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳.Producer完全无状态,可集群部署.

Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master.Slave建立长连接,且定时向Master.Slave发送心跳.Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定.

双主异步集群部署

序号 IP 角色 模式
1 192.168.20.164 nameServer1,brokerServer1 Master1
2 192.168.20.190 nameServer2,brokerServer2 Master2

创建存储路径

1
2
cd /home/tycs/software/rocketMq
mkdir -p store/{commitlog,consumequeue,index}

修改配置文件(替换成以下内容)

两台机器执行相同的操作,并注意,brokerName的值跟配置文件一致:

#vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
#vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

两台机器执行相同的操作,并注意,brokerName的值跟配置文件一致:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#所属集群名字
brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a|broker-b

#0 表示 Master,0 表示 Slave
brokerId=0

#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true

# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口
listenPort=10911

# 删除文件时间点,默认凌晨 4点
deleteWhen=04

#文件保留时间,默认 48 小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径
storePathRootDir= /usr/local/rocketmq/store

#commitLog 存储路径
storePathCommitLog= /usr/local/rocketmq/store /commitlog

#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue

#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index

#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint

#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort

#限制的消息大小
maxMessageSize=65536

#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master

#- SLAVE
brokerRole=ASYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false

#发消息线程池数量
#sendMessageThreadPoolNums=128

#拉消息线程池数量
#pullMessageThreadPoolNums=128

164的broker-a配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
namesrvAddr=192.168.20.164:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubcriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

#存储路径
storePathRootDir= /home/tycs/software/rocketMq/store
#commitLog 存储路径
storePathCommitLog= /home/tycs/software/rocketMq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/tycs/software/rocketMq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/tycs/software/rocketMq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/tycs/software/rocketMq/store/checkpoint
#abort 文件存储路径
abortFile=/home/tycs/software/rocketMq/store/abort

修改日志配置文件

修改日志配置文件的目录,两台机器执行相同的操作:

1
2
mkdir -p /usr/local/rocketmq/logs  
cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml

修改启动脚本参数

调一下JVM,包括nameserver 和 broker.限于自己机器的配置,参数调小一下.但Rocketmq最少的堆是1g,否则无法启动.两台机器执行相同的操作.  打开一下runbroker配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vim /usr/local/rocketmq/bin/runbroker.sh
  
#修改内容如下:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"


#打开一下runserver配置文件:
vim /usr/local/rocketmq/bin/runserver.sh

#修改内容如下:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"

启动

要先启动namerserver,再启broker,两台机器执行相同的操作.  启动nameserver

1
2
3
4
5
6
7
cd /usr/local/rocketmq/bin# nohup sh mqnamesrv &

#启动brokerserver(节点1用的是a.properties,节点2用的是b.properties)
cd /usr/local/rocketmq/bin# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties /dev/null 2&1 &# netstat -ntlp

#用下面命令查看一下
jps

IMG_256

可以用下面命令查看一下启动日志:

1
2
#tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log#
tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log

运维指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
###### 查看集群情况
./mqadmin clusterList -n 127.0.0.1:9876

###### **查看broker状态**
./mqadmin brokerStatus -n 127.0.0.1:9876 -b 192.168.146.105:10911

###### **查看topic列表**
./mqadmin topicList -n 127.0.0.1:9876

###### **查看topic状态**
./mqadmin topicStatus -n 127.0.0.1:9876 -t PushTopic

###### **查看topic路由**
./mqadmin topicRoute -n 127.0.0.1:9876 -t PushTopic

测试结果

IMG_256

参考网站

http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/
https://blog.csdn.net/zhanglianhai555/article/details/76554077
http://rocketmq.apache.org/docs/quick-start/