rocketmq源码分析:基本使用
Posted mask哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rocketmq源码分析:基本使用相关的知识,希望对你有一定的参考价值。
rocketmq源码分析目录
- 一、基本与使用
- 二、rocketmq源码分析
- 总结
一、基本概念与使用
rocketmq server搭建
1.从github clone 源码,导入idea
2.打开idea 项目的mvn终端 输入如下命令:
mvn -Prelease-all -DskipTests clean install -U
3.进入/Users/xx/Documents/github_opensource/rocketmq/distribution/target/rocketmq-4.9.1-SNAPSHOT/rocketmq-4.9.1-SNAPSHOT 目录如下:
4.进入/Users/xx/Documents/github_opensource/rocketmq/distribution/target/rocketmq-4.9.1-SNAPSHOT/rocketmq-4.9.1-SNAPSHOT/bin目录
5.启动 nameserver与broker
nohup sh bin/mqnamesrv &
nohup sh bin/mqbroker -n localhost:9876 &
报错如下:
ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! !!
ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! !!
解决方法:修改如下3个文件
修改[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=“你的jdk安装路径”
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home
注释掉如下
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
再次启动nameserver 和broker成功如下提示:
6.停止server
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
7.mqadmin:是RocketMQ 提供的控制台及一系列控制台命令,用于管理员对主题,集群,broker 等信息的管理
sh mqadmin 查看帮助
sh mqadmin help updateTopic :查看updateTopic 的使用
8.使用 rocketmq-console 开源项目添加MQ监控告警
利用rocketmq-console做如下的监控:
- RocketMQ 消费者下线
- RocketMQ 消息出现长时间或者大量堆积
rocketmq-console的监控告警功能:
作为mqadmin的GUI封装,具备了mqadmin的功能,也提供了一些额外的功能,如dashboard面板统计
rocketmq-console监控原理:
如何开启告警功能:
从码云中获取源码,rocketmq-externals 地址:https://gitee.com/mirrors/RocketMQ-Externals.git
导入idea ,修改application.properties文件,增加nameserver地址 localhost:9876
server.address=0.0.0.0
server.port=8080
### SSL setting
#server.ssl.key-store=classpath:rmqcngkeystore.jks
#server.ssl.key-store-password=rocketmq
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=rmqcngkey
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.level.root=INFO
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=localhost:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
#Dashbord文件目录,登录用户配置文件所在目录
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket
#Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
#开启登录功能
rocketmq.config.loginRequired=false
#set the accessKey and secretKey if you used acl
#rocketmq.config.accessKey=
#rocketmq.config.secretKey=
将项目打成jar包,并运行jar文件
执行:
mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-2.0.0.jar
#如果配置文件没有填写Name Server的话,可以在启动项目时指定namesrvAddr
$ java -jar target/rocrocketmq-console-ng-2.0.0.jar --rocketmq.config.namesrvAddr='localhost:9876'
执行成功,访问localhost:8080,成功如下:
开启监控告警:
重新打包,执行
mvn clean package -Dmaven.test.skip=true
出现如下错误:
Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17 错误
解决办法:
1.确定pom.xml 中的rocketmq版本
2.删除 maven-checkstyle-plugin 中标红部分该部分
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-checkstyle-plugin<artifactId>
<version>2.17version>
<executions>
<execution>
<id>validateid>
<phase>validatephase>
<configuration>
<excludes>src/main/resourcesexcludes>
<configLocation>style/rmq_checkstyle.xmlconfigLocation>
<encoding>UTF-8encoding>
<consoleOutput>trueconsoleOutput>
<failsOnError>truefailsOnError>
configuration>
<goals>
<goal>checkgoal>
goals>
execution>
executions>
plugin>
仅剩如下:
重新打包成功
java -jar rocketmq-console-ng-2.0.0.jar
访问成功!
开启定时任务监控,扫描实时数据,做阈值判断,告警提示
当此项功能被放开后,在Consumer菜单下,为每一个consumer-group 的operation 会增加MONITOR CONFIG 选项,如下图所示:
minCount 当前消费分组的机器数量最小阈值,低于此值将会告警
minCount 当前消费分组允许的最大消息堆积量,高于辞职将会告警
默认情况下,rocketmq-console只定义了定时任务入口,具体的策略没有任何处理,我们需要根据自己的需求加入自身的告警方式,比如:邮箱,钉钉,短信,微信等等。
其预留的定时任务实现类为:
org.apache.rocketmq.console.task.MonitorTask
定时任务的扫描频率可根据自身系统要求考量设置
修改MonitorTask代码,增加自己的告警系统:钉钉、短信、、、
重新编译打包。
rocketmq与activemq、kafka对比:
rocketmq生态
二、rocketmq源码分析
待续。。。。
参考资料:https://github.com/apache/rocketmq/tree/master/docs/cn
https://gitee.com/mirrors/RocketMQ-Externals.git
https://rocketmq-1.gitbook.io/rocketmq-connector/
https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md
以上是关于rocketmq源码分析:基本使用的主要内容,如果未能解决你的问题,请参考以下文章
源码分析 RocketMQ DLedger(多副本) 之日志追加流程
2RocketMQ 源码解析之 与 Spring Boot 集成