官方链接
- 官网:rocketmq.apache.org/
- GitHub: github.com/apache/rock…
- 拓展: github.com/apache/rock…
RocketMQ下载安装
Linux下使用maven编译安装
环境准备:
各版本要求:
Version | Client | Broker | NameServer |
---|---|---|---|
4.0.0-incubating | >=1.7 | >=1.8 | >=1.8 |
4.1.0-incubating | >=1.6 | >=1.8 | >=1.8 |
4.2.0 | >=1.6 | >=1.8 | >=1.8 |
4.3.x | >=1.6 | >=1.8 | >=1.8 |
4.4.x | >=1.6 | >=1.8 | >=1.8 |
4.5.x | >=1.6 | >=1.8 | >=1.8 |
4.6.x | >=1.6 | >=1.8 | >=1.8 |
4.7.x | >=1.6 | >=1.8 | >=1.8 |
4.8.x | >=1.6 | >=1.8 | >=1.8 |
4.9.x | >=1.6 | >=1.8 | >=1.8 |
01. github上下载源码并上传到服务器
02. 解压缩
unzip rocketmq-master.zip
03. 进入rocketmq主目录编译项目
mvn -Prelease-all -DskipTests clean install -U
编译好的rocketmq在./distribution/target/
目录下,全路径为:
04. 启动namesrv
cd
到bin/
目录下:
启动namesrv
:
./mqnamesrv
05. 启动broker
./mqbroker -n 127.0.0.1:9876
-n 表示指定namesrv
测试
使用tools.sh
脚本执行测试程序
生产消息
./tools.sh org.apache.rocketmq.example.quickstart.Producer
消费消息
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
控制台rocketmq-console编译安装
链接
下载并上传至服务器,解压并进入rocketmq-console
目录
执行编译
mvn clean package -Dmaven.test.skip=true
进入target目录,启动并指定namesrv
地址:
java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
安装启动常见错误
- 无法启动Java虚拟机
- 现象:
[root@iZ2ze85s3rq7ziemxzalwbZ 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.
- 原因:rocketmq默认配置初始化内存为4g,大于物理内存
- 解决:修改namesev启动脚本
runserver.sh
,将配置改小即可,broker启动脚本修改同理:
# JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
-
启动broker成功但提示:Failed to obtain the host name
- 现象:
[root@iZ2ze85s3rq7ziemxzalwbZ bin]# ./mqbroker -n localhost:9876
22:30:42.307 [main] ERROR RocketmqCommon - Failed to obtain the host name
java.net.UnknownHostException: node-113b: node-113b: No address associated with hostname
at java.net.InetAddress.getLocalHost(InetAddress.java:1505) ~[na:1.8.0_181]
at org.apache.rocketmq.common.BrokerConfig.localHostName(BrokerConfig.java:189) [rocketmq-common-4.6
.1.jar:4.6.1] at org.apache.rocketmq.common.BrokerConfig.<init>(BrokerConfig.java:38) [rocketmq-common-4.6.1.jar:4
.6.1] at org.apache.rocketmq.broker.BrokerStartup.createBrokerController(BrokerStartup.java:110) [rocketmq
-broker-4.6.1.jar:4.6.1] at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58) [rocketmq-broker-4.6.1.jar:4
.6.1]Caused by: java.net.UnknownHostException: node-113b: No address associated with hostname
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_181]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_181]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_181]
at java.net.InetAddress.getLocalHost(InetAddress.java:1500) ~[na:1.8.0_181]
... 4 common frames omitted
The broker[DEFAULT_BROKER, 192.168.150.213:10911] boot success. serializeType=JSON and name server is localh
ost:9876
- 原因:无法解析主机名
- 解决:hosts文件里添加映射即可
tools.sh
脚本测试报错:connect to null failed
- 现象:
[root@iZ2ze85s3rq7ziemxzalwbZ bin]# ./tools.sh org.apache.rocketmq.example.quickstart.Producer
00:55:48.597 [main] DEBUG i.n.u.i.l.InternalLoggerFactory - Using SLF4J as the default logging framework
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
java.lang.IllegalStateException: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed
at org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:679)
at org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:509)
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.tryToFindTopicPublishInfo(DefaultMQProducerImpl.java:702)
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:566)
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1384)
at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1328)
at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:330)
at org.apache.rocketmq.example.quickstart.Producer.main(Producer.java:67)
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed
at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:394)
at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1365)
at org.apache.rocketmq.client.impl.MQClientAPIImpl.getTopicRouteInfoFromNameServer(MQClientAPIImpl.java:1355)
at org.apache.rocketmq.client.impl.factory.MQClientInstance.updateTopicRouteInfoFromNameServer(MQClientInstance.java:622)
... 7 more
- 原因:找不到namesrv
- 解决:修改tools.sh,指定
namesrv
的地址:
export NAMESRV_ADDR=127.0.0.1:9876