阿里云CentOs搭建RocketMQ环境 有更新!

  hehaitao074

环境需要

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连接,可以保证信息同步性)

Spring Boot 中使用 RocketMQ