RocketMq消息中间件(一)

一、RocketMQ的安装

1、下载地址:https://github.com/apache/rocketmq

1
wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip

2、解压

1
unzip rocketmq-all-4.7.0-bin-release.zip

3、启动namesrv

1
2
cd rocketmq-all-4.7.0-bin-release/bin
./mqnamesrv

4、启动broker

1
2
cd rocketmq-all-4.7.0-bin-release/bin
./mqbroker -n localhost:9876

常见错误:启动broker失败 Cannot allocate memory

是由于默认内存分配的太大了,超出了本机内存,直接OOM了。

修改bin/目录下的如下两个脚本

1
2
runbroker.sh
runserver.sh

在这两个脚本里都搜索-server -Xms,将其内存分配小点

二、RocketMQ控制台的安装

控制台目前获取方式有如下两种:

  1. 第三方网站去下载现成的,比如csdn等。
  2. 官方源码包自己编译而成,官方没有现成的。

我们这里当然采取官方方式。

github https://github.com/apache/rocketmq-externals

文档 https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md

2、下载源码

https://codeload.github.com/apache/rocketmq-externals/zip/master

3、修改配置(可选)

修改rocketmq-console\src\main\resources\application.properties文件的server.port就欧了。默认8080。

4、编译打包

进入rocketmq-console,然后用maven进行编译打包

1
mvn clean package -DskipTests

打包完会在target下生成我们spring boot的jar程序,直接java -jar启动完事。

5、启动控制台

将编译打包好的springboot程序扔到服务器上,执行如下命令进行启动

1
java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876

如果想后台启动就nohup &

三、测试

rocketmq给我们提供了测试工具和测试类,可以在安装完很方便的进行测试。

1、准备工作

rocketmq给我们提供的默认测试工具在bin目录下,叫tools.sh。我们测试前需要配置这个脚本,为他指定namesrv地址才可以,否则测试发送/消费消息的时候会出现如下错误 connect to null failed

1
2
3
4
22:49:02.470 [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

配置如下:

1
2
3
vim tools.sh
# 在export JAVA_HOME上面添加如下这段代码
export NAMESRV_ADDR=localhost:9876

2、发送消息

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

成功的话会看到哗哗哗的日志,因为这个类会发送1000条消息到TopicTest这个Topic下。

3、消费消息

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

成功的话会看到哗哗哗的日志,因为这个类会消费TopicTest下的全部消息。刚发送的1000条都会被消费掉。