0x01 RocketMQ安装测试

1,601 阅读2分钟

官方链接

RocketMQ下载安装

Linux下使用maven编译安装

环境准备:

image.png

各版本要求:

VersionClientBrokerNameServer
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上下载源码并上传到服务器

image.png

02. 解压缩

unzip rocketmq-master.zip

03. 进入rocketmq主目录编译项目

mvn -Prelease-all -DskipTests clean install -U

image.png

编译好的rocketmq在./distribution/target/目录下,全路径为:

image.png

04. 启动namesrv

cdbin/目录下:

image.png

启动namesrv

./mqnamesrv

image.png

05. 启动broker

./mqbroker -n 127.0.0.1:9876

-n 表示指定namesrv

image.png

测试

使用tools.sh脚本执行测试程序

生产消息

./tools.sh org.apache.rocketmq.example.quickstart.Producer

image.png

消费消息

./tools.sh org.apache.rocketmq.example.quickstart.Consumer

image.png

控制台rocketmq-console编译安装

链接

github.com/apache/rock…

下载并上传至服务器,解压并进入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

image.png

安装启动常见错误

  1. 无法启动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"
  1. 启动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文件里添加映射即可
  1. 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