rocketmq的使用
第一章 在linux上安装rocketmq
文章目录
前言
一. rocketmq是什么?
参考 rocketmq官网.
二. 安装步骤
1. 下载源文件或二进制文件 这里以4.7.1版本为例
2. 解压缩
使用unzip解压缩命令 如果没有的话需要下载命令
yum install -y unzip
- 源文件解压缩
需要添加jdk maven 环境
maven环境可配置 阿里云 镜像地址
在 settings.xml 配置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
unzip rocketmq-all-4.7.1-source-release.zip (解压)
cd rocketmq-all-4.7.1/ (进入解压目录)
mvn -Prelease-all -DskipTests clean install -U (编译部署)
cd distribution/target/apache-rocketmq (进入指定目录) 在这个目录下的文件就是第二种方式的二进制文件
- 二进制文件
代码如下(示例):
unzip rocketmq-all-4.7.1-bin-release.zip
三. 启动RocketMq
1. 本地虚拟机的话,需要修改内存大小
rocketmqlianggel脚本文件默认是设置的8GB内存,如果是本地搭建的虚拟机或买的云服务器没有配置这么大内存,rocketmq 服务会启动失败,需要修改一下配置。
如下有两个文件需要修改
- bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
调整为(依情况而定)
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
- bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
调整为(依情况而定)
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
2. 启动程序
源文件编译后的话,需要在 distribution/target/rocketmq-4.7.1/rocketmq-4.7.1
二进制文件的话,需要在rocketmq-all-4.7.1-bin-release 目录下执行
- Nameserver-服务端 启动完成后可退出
执行命令 :
nohup sh bin/mqnamesrv > nameserver.log 2>&1 &
- Broker-客户端(消费端)启动完成后可退出
执行命令 :
nohup sh bin/mqbroker -n localhost:9876 > broker.log 2>&1 &
但是如果要加载 conf/broker.conf 文件 一定要加上 -c conf/broker.conf
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf > broker.log 2>&1 &
- 查看启动日志
Nameserver-服务端
# 上一步指定地址了
tail -f nameserver.log
tail -f ~/logs/rocketmqlogs/namesrv.log(如果没有指定输入日志地址)
成功
Broker-客户端(消费端)
# 上一步指定地址了
tail -f broker.log
tail -f ~/root/logs/rocketmqlogs/broker.log(如果没有指定输入日志地址)
成功
- JPS查看是否成功启动
使用命令 jps 查看内容即为成功
[root@localhost rocketmq-all-4.7.1-bin-release]# jps
517 NamesrvStartup
629 Jps
557 BrokerStartup
四. 测试启动
远程连接linux工具打开两个会话,一个做消息发送方(Producer),一个做消息消费方(Consumer)
- 在 /etc/profile 下添加地址
export NAMESRV_ADDR=localhost:9876
source /etc/profile (刷新配置)
- 打开一个控制台 消息发送方
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
- 打开另一个控制台 消息接收方
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
可以在控制台看到相关信息
五. 关闭RocketMq
关闭rocketMQ
- Nameserver-服务端
sh bin/mqshutdown namesrv
- Broker-客户端(消费端)
sh bin/mqshutdown broker
六. RocketMq 监控
下载地址
maven 环境进行打包
mvn clean package -Dmaven.test.skip=true
根据自己jar版本修改启动命令
java -jar rocketmq-console-ng-2.X.X.jar --server.port=8080 --rocketmq.config.namesrvAddr=127.0.0.1:9876
说明:
(1) --server.port=8080 指定web应用的端口 8080
–rocketmq.config.namesrvAddr=127.0.0.1:9876 指定rockemq的nameserver 的地址和端口
以上两个参数可以在项目中的配置文件 rocketmq-console/src/main/resources/application.properties 指定
(2)启动控制台前需要先启动rocketmq的namesrv和broker 不然控制台项目连接不上rocketmq会报错如下
页面访问127.0.0.XX:8080
七. 整合springboot
环境: jdk8 maven
在maven中添加依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
yml配置文件:
rocketmq:
name-server: 192.168.13.200:9876
producer:
group: ml-producer-group
生产者代码:
@RestController
@RequestMapping("/mq/message")
public class MqMessageController {
private static final Logger log = LoggerFactory.getLogger(MqMessageController.class);
@Autowired
private RocketMQTemplate rocketMQTemplate;
@RequestMapping("/test")
public R get(@RequestParam("id") int id) {
rocketMQTemplate.convertAndSend("ml-topic", "hello world" + id);
return R.ok();
}
消费者代码:
@Component
@RocketMQMessageListener(topic = "ml-topic", consumerGroup = "ml-consumer-group")
@Slf4j
public class Consumer implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
log.info(message);
System.out.println(message);
}
}
测试结果:
心血来潮: 压测一下
个人理解概念:
namesrc = broker 的注册中心
broker = 处理消息的地方
注意: 以下结论是基于虚拟机安装
- 当出现
RemotingConnectException: connect to <172.17.0.1:10911> failed
的问题的时候是自己client的代码连接不到 broker,导致的原因是:broker部署在虚拟机,并且虚拟双网卡,client无法正常连接服务端.此时需要在broker启动的时候指定namesrvAddr,并一定要加载该配置文件启动
命令: nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf > broker.log 2>&1 &
参考地址
https://www.jianshu.com/p/a79058abeacf
https://www.cnblogs.com/chenyanbin/p/13798952.html