环境需要
64位操作系统,建议使用Linux / Unix /,这里我是在阿里云服务器上进行的部署
CentOs7.4
64bit JDK 1.8+
Maven 3.5.x
JDK Maven 的安装 https://blog.csdn.net/hehaitao074/article/details/79806405
下载和构建
下载4.2.0源码版本并解压4.2.0源码版本并构建二进制文件
wget http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
unzip rocketmq-all-4.2.0-source-release.zip
cd rocketmq-all-4.2.0
mvn -Prelease-all -DskipTests clean install -U
mv distribution/target/apache-rocketmq /home/apache-rocketmq
cd /home/apache-rocketmq
编译成功的响应
INFO] Reactor Summary:
[INFO]
[INFO] Apache RocketMQ 4.2.0 4.2.0 ........................ SUCCESS [ 3.457 s]
[INFO] rocketmq-remoting 4.2.0 ............................ SUCCESS [ 5.643 s]
[INFO] rocketmq-common 4.2.0 .............................. SUCCESS [ 4.948 s]
[INFO] rocketmq-client 4.2.0 .............................. SUCCESS [ 4.888 s]
[INFO] rocketmq-store 4.2.0 ............................... SUCCESS [ 2.951 s]
[INFO] rocketmq-srvutil 4.2.0 ............................. SUCCESS [ 0.428 s]
[INFO] rocketmq-filter 4.2.0 .............................. SUCCESS [ 1.381 s]
[INFO] rocketmq-broker 4.2.0 .............................. SUCCESS [ 3.019 s]
[INFO] rocketmq-tools 4.2.0 ............................... SUCCESS [ 2.334 s]
[INFO] rocketmq-namesrv 4.2.0 ............................. SUCCESS [ 0.854 s]
[INFO] rocketmq-logappender 4.2.0 ......................... SUCCESS [ 0.752 s]
[INFO] rocketmq-openmessaging 4.2.0 ....................... SUCCESS [ 1.010 s]
[INFO] rocketmq-example 4.2.0 ............................. SUCCESS [ 1.227 s]
[INFO] rocketmq-filtersrv 4.2.0 ........................... SUCCESS [ 0.731 s]
[INFO] rocketmq-test 4.2.0 ................................ SUCCESS [ 1.443 s]
[INFO] rocketmq-distribution 4.2.0 4.2.0 .................. SUCCESS [ 5.162 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 40.789 s
[INFO] Finished at: 2018-04-03T18:21:23+08:00
[INFO] ------------------------------------------------------------------------
Start Name Server
默认 RocketMQ Server 内存需要很大的
vi bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
我修改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
nohup sh bin/mqnamesrv > /dev/null 2>&1 &
tail -f ~/logs/rocketmqlogs/namesrv.log
会看到如下响应信息
2018-04-03 18:24:04 INFO main - The Name Server boot success. serializeType=JSON
Start Broker
默认 RocketMQ Broker 内存需要很大的
vi bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
我修改成
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
启动Broker
如果想要外网可访问,先创建一个broker的配置文件 broker.p,内容如下
namesrvAddr=外网IP(或者你的内网IP):9876
brokerIP1=外网IP
brokerName=hht
brokerClusterName=DefaultCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
接着启动broker
nohup sh bin/mqbroker -c broker.p> /dev/null 2>&1 &
tail -f ~/logs/rocketmqlogs/broker.log
会看到如下响应信息
2018-04-03 18:26:01 INFO main - register broker to name server localhost:9876 OK
2018-04-03 18:26:01 INFO main - The broker[hht, 172.31.88.16:10911] boot success. serializeType=JSON and name server is localhost:9876
还可以输入命令jps查询当前java进程,此时应该可以看到NamesrvStartup,BrokerStartup,说明上述两个服务成功启动了
[root@hht apache-rocketmq]# jps
489 Bootstrap
25340 NamesrvStartup
25580 Jps
1116 Application
发送并接受 消息
发送消息
发送/接收消息之前,我们需要告诉客户端 NameServer 地址。RocketMQ 提供了多种方式来实现这一目标。为简单起见,我们使用环境变量 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...
到此单机环境搭建成功,并成功启动了Producer和Consumer进行了消息收发的测试。
下面开始划重点
nameserver端口默认为9876
broker监听端口默认为10911
停止服务
停止 broker
> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
停止 namesrv
> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
安装、启动rocketmq-console
wget https://github.com/duomu/rocketmq-console/raw/master/rocketmq-console.war 下载
将rocketmq-console.war放在/home/javaweb/apache-tomcat-6.0.41/webapps目录下
sh /home/javaweb/apache-tomcat-6.0.41/bin/startup.sh 启动tomcat
云主机远程访问http://x.x.x.x:8080/rocketmq-console,显示如下页面表示启动成功
若无法访问,请检查防火墙是否关闭或者是否开放了8080端口号。
RocketMQ主要角色简介
Producer:
一般由业务系统产生消息,通过topic来标示
存在Producer Group的概念
Consumer:
有两种实现方式,一种push Consumer,第二种是 pull Consumer。
本章启动的示例Consumer为push consumer。在consumer对象注册一个listener接口,一接收到消息,consumer对象立刻回调 Listener方法。
push Consumer和pull Consumer的区别简单理解:两者基本原理相同,push是封装好了,傻瓜调用。pull需要自主实现,由应用控制
存在Consumer Group的概念
Broker:
消息中转角色,负责存储消息,转发消息。
拥有Master、slave(主备)的概念,主备有同步复制、异步双写功能来保持数据同步(未深研)。标识:Master的BrokerId 为 0 ,Slave的BrokerId 非0。
部署模式:
单Master无Slave(脆弱)
单Master多Slave(单点故障就瘫,开源版无主备切换功能)
多Master无Slave(无单点故障,线上生产常用模式)
多Master多Slave(无单点故障)
Broker 与 Name Server 集群中的所有节点建立长连接,定时(心跳)注册 Topic 信息到所有 Name Server。
Name Server:
无状态节点,可集群部署,节点之间无任何信息同步(Broker与每个namesrv连接,可以保证信息同步性)