前提
通过前面两篇文章可以简单的了解 RocketMQ 和 安装 RocketMQ ,今天就将 SpringBoot 和 RocketMQ 整合起来使用。
相关文章
关注我
转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/02/07/SpringBoot-RocketMQ/
创建项目
在 IDEA 创建一个 SpringBoot 项目,项目结构如下:
pom 文件
引入 RocketMQ 的一些相关依赖,最后的 pom 文件如下:
1 | "1.0" encoding="UTF-8" xml version= |
配置文件
application.properties 中如下:
1 | # 消费者的组名 |
生产者
1 | package com.zhisheng.rocketmq.client; |
消费者
1 | package com.zhisheng.rocketmq.server; |
启动类
1 | package com.zhisheng.rocketmq; |
RocketMQ
代码已经都写好了,接下来我们需要将与 RocketMQ 有关的启动起来。
启动 Name Server
在前面文章中已经写过怎么启动,http://www.54tianzhisheng.cn/2018/02/06/RocketMQ-install/#%E5%90%AF%E5%8A%A8-NameServer
进入到目录 :
1 | cd distribution/target/apache-rocketmq |
启动:
1 | nohup sh bin/mqnamesrv & |
启动 Broker
1 | nohup sh bin/mqbroker -n localhost:9876 & |
然后运行启动类,运行效果如下:
监控
RocketMQ有一个对其扩展的开源项目 ocketmq-console ,如今也提交给了 Apache ,地址在:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console ,官方也给出了其支持的功能的中文文档:https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md , 那么该如何安装?
Docker 安装
1、获取 Docker 镜像
1 | docker pull styletang/rocketmq-console-ng |
2、运行,注意将你自己的 NameServer 地址替换下面的 127.0.0.1
1 | docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng |
非 Docker 安装
我们 git clone 一份代码到本地:
1 | git clone https://github.com/apache/rocketmq-externals.git |
需要 jdk 1.7 以上。 执行以下命令:
1 | mvn spring-boot:run |
或者
1 | mvn clean package -Dmaven.test.skip=true |
注意:
1、如果你下载依赖缓慢,你可以重新设置 maven 的 mirror 为阿里云的镜像
1 | <mirrors> |
2、如果你使用的 RocketMQ 版本小于 3.5.8,如果您使用 rocketmq < 3.5.8,请在启动 rocketmq-console-ng 时添加 -Dcom.rocketmq.sendMessageWithVIPChannel = false
(或者您可以在 ops 页面中更改它)
3、更改 resource / application.properties 中的 rocketmq.config.namesrvAddr(或者可以在ops页面中更改它)
错误解决方法
1、Docker 启动项目报错
org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <null> failed
将 Docker 启动命令改成如下以后:
1 | docker run -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=127.0.0.1:9876 -Drocketmq.config.isVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng |
报错信息改变了,新的报错信息如下:
1 | ERROR op=global_exception_handler_print_error |
看到网上有人也遇到这个问题,他们都通过自己的方式解决了,但是方法我都试了,不适合我。不得不说,阿里,你能再用心点吗?既然把 RocketMQ 捐给 Apache 了,这些文档啥的都必须更新啊,不要还滞后着呢,不然少不了被吐槽!
搞了很久这种方法没成功,暂时放弃!mmp
2、非 Docker 安装,只好把源码编译打包了。
1) 注意需要修改如下图中的配置:
1 | rocketmq.config.namesrvAddr=localhost:9876 //注意替换你自己的ip |
2) 执行以下命令:
1 | mvn clean package -Dmaven.test.skip=true |
编译成功:
可以看到已经打好了 jar 包:
运行:
1 | java -jar rocketmq-console-ng-1.0.0.jar |
成功,不报错了,开心😄,访问 http://localhost:8080/
整个监控大概就是这些了。
然后我运行之前的 SpringBoot 整合项目,查看监控信息如下:
总结
整篇文章讲述了 SpringBoot 与 RocketMQ 整合和 RocketMQ 监控平台的搭建。
参考文章
1、http://www.ymq.io/2018/02/02/spring-boot-rocketmq-example/#%E6%96%B0%E5%8A%A0%E9%A1%B9%E7%9B%AE
2、GitHub 官方 README