1.RocketMQ简介
RocketMQ是阿里巴巴中间件开发的分布式消息系统,曾经经历过很多阿里巴巴大型项目的实际检验。在去年已经正式捐献给Apache开源基金会,成为孵化项目。今年正式升级成为了apache的顶级项目。
RocketMQ官网地址为:http://rocketmq.apache.org/,感兴趣的可以多多查看官网文档。
2.准备工作
2.1 安装环境
本文所安装的RocketMQ为4.7.0版本,Linux系统版本为CentOS 7.2,安装目录为/opt。
2.2 准备工具
1.Java
RocketMQ是使用Java开发的,所以需要在Linux系统内安装Java环境。
java安装见:https://www.yuque.com/lingjun-nb4x6/xl5ra1/ivybxk
2.Maven
项目下载下来之后需要使用Maven编译,所以需要提前安装。
maven安装见:https://www.yuque.com/lingjun-nb4x6/xl5ra1/cg17h2
2.安装RocketMQ
步骤大致分为如下几步:
2.1 下载RocketMQ
cd /opt
wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.0.tar.gz
2.2 解压文件
tar -zxvf rocketmq-all-4.7.0.tar.gz
2.3 编译项目
cd rocketmq-rocketmq-all-4.7.0
mvn -Prelease-all -DskipTests clean install -U
2.4 进入启动目录
cd /opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/bin
其实这一步可以省略,可以在环境变量配置rocketmq全局变量,编辑/etc/profile加入如下代码:
#for rocketMq
export rocketmq=/opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
export PATH=$PATH:$rocketmq/bin
刷新配置:
source /etc/profile
2.5 启动Nameserver,其中/usr/local/logs/rocketmqlogs/mqnamesrv.log为RocketMQ日志文件
#进入rocketMq目录
cd /opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
mkdir logs
#启动RocketMq,并指定日志目录
nohup sh mqnamesrv >/opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/logs/mqnamesrv.log 2>&1 &
2.6 启动Broker
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true >/opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/logs/broker.log 2>&1 &
2.7 创建启动文件:
vim mqnamesrv.sh
vim mqbroker.sh
chmod +x mq
保存2.5 ,* 2.6步启动脚本,下次直接执行脚本启动
3.安装问题
内存分配不够,修改runserver.sh和runbroker.sh两个文件的如下位置:
4.可视化管理页面安装
可视化页面可以到GitHub上下载,下载位置:
https://github.com/apache/rocketmq-externals
百度网盘:链接: https://pan.baidu.com/s/1zcBAJFiYnFKmBQ2XgvNWjw 提取码: dc33 
拉取下来的是源码包,需要maven打包。
使用命令编译,如下: mvn clean package -Dmaven.test.skip=true
然后会生成rocketmq-console-ng-2.0.0.jar,
直接运行即可:
java -jar rocketmq-console-ng-2.0.0.jar —server.port=12581 —rocketmq.config.namesrvAddr=localhost:9876 &
参数说明:
—server.port为运行的这个web应用的端口,如果不设置的话默认为8080;
—rocketmq.config.namesrvAddr为RocketMQ命名服务地址,如果不设置的话默认为“”。
启动后监控页面如图所示
5 开发常见问题:
问题1:
No route info of this topic: testTopic
常见原因:
1-端口未开放,外部不可访问:
开发端口
2-防火墙未关闭:
开放防火墙端口或临时关闭防火墙
3-broker 禁止自动创建 Topic,并且也没有手动创建 Topic 的情况
解决方案,最简单的方式就是在 broker 的配置文件或启动脚本中,新增自动创建 topic 的配置
# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
但是这种方案在生产环境不是很建议,如果只是测试调试,这种方案是最简单的。另一种就是启动 broker 之后,手动创建 topic ,同样也可以解决
问题2:
安装 rocket mq 后,启动namesrver, broker 后,使用官方给出的例子,运行报错:sendDefaultImpl call timeout
org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeoutat org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:588)at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1223)at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1173)at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:214)at com.flying.demo.Producer.main(Producer.java:25)
解决方法:docker 的ip ,这块必须改成服务器的本机ip
启动namesrver
nohup sh bin/mqnamesrv -n "200.200.3.38:9876" &
启动broker ,强制加上本机ip
echo 'brokerIP1=200.200.3.38' > conf/broker.properties
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.properties autoCreateTopicEnable=true &
再运行程序,不报错了
