RocketMQ的安装
他是一款低延迟,高可用,0丢失 的消息中间件。因为kafka满足不了阿里的需求,尤其是对低延迟和高可用这一块,所以后来就有个这个中间件,在低延迟和高可用以及0丢失方面优于kafka 。
一、rocketmq简单了解 ~ 它诞生的背景
activemq的io达到瓶颈,尽管已经通过限流或者降低的方式,但还是不能够尽如人意,所以就关注到了当下比较流行的消息传递解决方案kafka,不幸的是,kafka也不能满足阿里的需求,尤其是在低延迟跟高可用上。
在这种情况下,决定开发一个新的消息传递引擎操作更广发的用例,从传统的发布订阅情景到 大批量 实时 零损失容忍 的交易系统。我们相信这个解决方案是有益的,所以面向社区 开源了它的源代码。
如今,有超过100多家企业在他们的业务中使用了rocketmq的开源版本(2016年12月16日之前官网统计的数据)
它的优点:
1 、低延迟: 高压下1ms响应超过99.6%
2、面向金融:具有追踪和审计的高可用性。
3、大数据友好,高吞吐
4、邮件堆积,0损失 .act
二、RocketMQ的安装
官网 : rocketMQ官网链接
GitHub:rocketmq源码
rocketMQ安装+内置消息订阅脚本tools.sh的测试
一)、注意版本兼容问题
下载源码:
下载rocketMQ 的zip文件
rocketmq-externals
rocketmq
源码是java语言编写的,本文是直接下载源码,编译安装的,后期小伙伴们遇到别的java开源项目也可以按这个来编译哈:
1、rocketmq-master
上传到linux服务器后,将ro开头的文件挪到/root目录下 mv ro* /root/
解压缩后,放到 /usr/local/目录下,进入rocket-master文件夹,看到pom文件,在当前目录输入如下安装命令
unzip rocketmq-master.zip
cd rocketmq
-- 看到有pom文件,对项目进行编译
mvn -Prelease-all -DskipTests clean install -U
pwd
/root/rocketmq-master/distribution/target/rocketmq-4.7.1
[root@node02 rocketmq-4.7.1]# ls
rocketmq-4.7.1
-- 挪到/usr/local 下
[root@node02 rocketmq-4.7.1]# mv rocketmq-4.7.1/ /usr/local
cd /usr/local/
-- 改名
mv rocketmq-4.7.1 rocketmq
cd rocketmq/bin/
[root@node02 bin]# ls
cachedog.sh dledger mqbroker mqbroker.numanode1 mqnamesrv mqshutdown.cmd play.sh runbroker.sh setcache.sh tools.sh
cleancache.sh mqadmin mqbroker.cmd mqbroker.numanode2 mqnamesrv.cmd os.sh README.md runserver.cmd startfsrv.sh
cleancache.v1.sh mqadmin.cmd mqbroker.numanode0 mqbroker.numanode3 mqshutdown play.cmd runbroker.cmd runserver.sh tools.cmd
执行脚本如下,如果启动成功则会给出提示:
[root@node02 bin]# ./mqnamesrv
新开窗口同上路径(cd /usr/local/rocketmq471/bin)执行:
./mqbroker -n localhost:9876
rocketMQ跟zk有点像,需要broker注册到mqnamesrv上,别人才能消费mqbroker提供的服务。
rocketmq的bin目录下有几个重要的脚本 需要关注:
mqbroker 是服务,启动的时候要加载runbroker.sh 脚本里的配置 ;mqnamesrv相当于注册中心,启动的时候要加载runserver.sh 脚本里的配置
言外之意如果注册中心或者服务 只要起不来,可以看看对应的两个配置里是否有需要调整的,比如你虚拟机的运存一共就1g,结果这俩配置文件里分配的都很大,就需要调整下。
重新开一个窗口,提供了一个脚本支持测试下消息订阅:
在cd /usr/local/rocketmq/bin 目录下,执行tools.sh脚本
./tools.sh org.apache.rocketmq.example.quickstart.Producer
执行之后,再执行
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
输出完会等待下一次
2、rocketmq-externals 启动控制台程序,监控消息订阅等情况
解压缩rocketmq-externals-master.zip
然后进行编译
unzip rocketmq-externals-master.zip
cd /root/rocketmq-externals-master/rocketmq-console
-- 看到有pom文件,进行编译:
mvn clean package -Dmaven.test.skip=true
cd target/
-- 将生成的jar文件放到指定目录下
mv rocketmq-console-ng-1.0.1.jar /usr/local/
cd /usr/local/
-- 启动控制台
springboot的一个特点是可以动态修改文件属性,所以可以直接在启动的时候附加配置信息,启动方式1:
java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
启动方式2:
编辑 vi /root/rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties
找到 rocketmq.config.namesrvAddr= ,然后编辑为
rocketmq.config.namesrvAddr=127.0.0.1:9876 保存后
进入到cd /usr/local/ ,直接启动java -jar rocketmq-console-ng-1.0.1.jar 即可。
注册中心启动成功:
服务启动成功:
[root@node02 bin]# ./mqbroker
The broker[node02, 192.168.252.188:10911] boot success. serializeType=JSON
console.jar启动成功:
...
[2020-08-02 04:30:01.886] INFO Initializing ProtocolHandler ["http-nio-8080"]
[2020-08-02 04:30:01.944] INFO Starting ProtocolHandler [http-nio-8080]
[2020-08-02 04:30:01.991] INFO Using a shared selector for servlet write/read
[2020-08-02 04:30:02.045] INFO Tomcat started on port(s): 8080 (http)
[2020-08-02 04:30:02.073] INFO Started App in 32.524 seconds (JVM running for 35.865)
...
图示日志告诉我,他给我提供了一个http服务,端口8080.那我们可以去访问下试试
在网页输入: http://你的rocketmq服务器ip:8080/
然后你就可以通过控制台后台界面查看消费信息了:
二)、安装过程遇到的问题
1 执行./mqnamesrv报错,错误信息如下:
[root@node02 bin]# ./mqnamesrv
Invalid initial heap size: -Xms4g
The specified size exceeds the maximum representable size.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
解决:
修改 /usr/local/rocketmq471/bin/ runserver.sh 里,我的虚拟机运存1g,如下可修改为配置值:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
重新执行 mqnamesrv
即可,不好用的话,source
刷新一下该文件,再次执行mqnamesrv
脚本即可。
2 执行 ./mqbroker
报错:
[root@node02 bin]# ./mqbroker
00:09:32.610 [main] ERROR RocketmqCommon - Failed to obtain the host name
java.net.UnknownHostException: node02: node02: Name or service not known
at java.net.InetAddress.getLocalHost(InetAddress.java:1506) ~[na:1.8.0_261]
at org.apache.rocketmq.common.BrokerConfig.localHostName(BrokerConfig.java:192) [rocketmq-common-4.7.1.jar:4.7.1]
at org.apache.rocketmq.common.BrokerConfig.<init>(BrokerConfig.java:39) [rocketmq-common-4.7.1.jar:4.7.1]
at org.apache.rocketmq.broker.BrokerStartup.createBrokerController(BrokerStartup.java:110) [rocketmq-broker-4.7.1.jar:4.7.1]
at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58) [rocketmq-broker-4.7.1.jar:4.7.1]
Caused by: java.net.UnknownHostException: node02: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_261]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929) ~[na:1.8.0_261]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324) ~[na:1.8.0_261]
at java.net.InetAddress.getLocalHost(InetAddress.java:1501) ~[na:1.8.0_261]
... 4 common frames omitted
解决:编辑 /etc/hosts
vi /etc/hosts
追加如下内容,保存即可
服务器ip node02
3 执行tools.sh脚本报错connect to null failed**
;
解决:编译 vi tools.sh ,追加 export NAMESRV_ADDR=localhost:9876