RocketMQ-本地搭建
中间件概念
即中间角色,不独立工作。
- 文件中间件,如 FastHDFS
- 消息中间件,如各种 MQ、Kafka
- 搜索中间件,如 ElasticSearch
- 缓存中间件,如 Redis、Memcache
安装
- 下载 jdk
sudo apt-get install openjdk-8-jdk
,安装后配置$JAVA_HOME
,将$JAVA_HOME/bin
加入 PATH - 安装 mvn(官网,菜鸟教程)
- 下载 RocketMQ 并安装(官网)
注意不是 jre,而是 jdk。
注意版本,可能会有问题。
如果在执行编译 MQ(mvn 命令)时出现Compilation failure: [ERROR] Source option 5 is no longer supported. Use 6 or later
的错误,需要将 pom.xml 中的maven-compiler-plugin
配置source
和targeet
改为 1.7 及以上重试。(也可能是版本问题造成的)
启动
当编译完了后(mvn 命令),会有一个 ./distribution/target
目录,此目录是编译后的文件,我当前的可执行文件是在 ./distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/bin
中。
可以将生成的 rocketmq-4.7.0
目录移动到系统目录中,如 /usr/local/
下。
启动 nameserver
nameserver 相当于一个注册中心,需要先启动它。
进入到 bin 目录中
./mqnamesrv
启动 broker
启动前,要先设置一下。更改 runbroker.sh
中的配置
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m"
启动 broker,需要指定 -n 参数来指定 nameserver 地址和端口
$./mqbroker -n localhost:9876
The broker[robincai-master, 10.9.0.18:10911] boot success. serializeType=JSON
mqnamesrv
实际是调用了./runserver.sh
,mqbroker
实际是调用了runbroker.sh
。
runserver.sh
执行了许多配置,比如配置 JVM 的 GC,它启动时上来就给 nameserver 4G 的内存。
runbroker.sh
上来就给 8G 的内存,所以需要上面的配置改动,不然启动时就挂了。
错误信息如下:./mqbroker Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12) # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory. # An error report file with more information is saved as: # /usr/local/rocketmq-4.7.0/bin/hs_err_pid31891.log
测试消息发送和接收
在 bin 目录下有一个 tools.sh
,可用来测试,但需要首先修改其配置:
export NAMESRV_ADDR=localhost:9876
然后分别测试发送和接收消息:
./tools.sh org.apache.rocketmq.exampl先改一下 broker 的内存e.quickstart.Producer
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
若无报错,即为成功
控制台
RocketMQ 没有自带的控制台,而可以下载源码安装一个。目录为 rocketmq-externals 中的 rocketmq-console
扩展。
克隆项目。进入到 rocketmq-console
中,执行编译
mvn clean package -Dmaven.test.skip=true
同样会生成一个 target 目录,其中有两个 jar 包,一个是源码包,一个是可用 java 运行的包(rocketmq-console-ng-1.0.1.jar
)。
运行控制台服务
java -jar rocketmq-console-ng-1.0.1.jar
其默认运行在 8080 端口,打开 localhost:8080
可查看界面。
在 OPS 页面输入 nameserver 地址(按回后点击更新)即可查看。
启动时加配置
--rocketmq.config.namesrvAddr=127.0.0.1:9876
参数可默认连到一个 nameserver。
也可以写在配置文件中,见源码包中的application.properties
文件。