简介
最近在学习RocketMQ
,但一直苦于没有合适的环境学习。我的电脑是Windows
系统,虽然换上了专业版装上了Docker
,而且也有虚拟机,平常也会通过这些环境学习,但是还是太不方便了,为了方便终于又用上了云服务器,这次是阿里的。
配置如下
CPU&内存 1核(vCPU)2 GiB
操作系统 CentOS 7.8 64位
当前使用带宽 1Mbps
这次RocketMQ
的配置包括,RocketMQ(NameServer、Broker)
和控制台RocketMQ-Dashboard
提要:基础的JDK
和Maven
这里不多提了,都安装配置好了,另外后面的RocketMQ-Dashboard
采用Docker
部署方式,Docker
安装查看官网装上就好。
RocketMQ
https://rocketmq.apache.org/zh/docs/quickStart/02quickstart/
准备RocketMQ安装包
官网提供有二进制包和源码包,区别是:源码包通过编译成为二进制包才可运行
这里直接准备rocketmq-all-5.0.0-bin-release.zip
二进制包
创建目录并解压
选好目录解压
如果缺少zip
和unzip
,直接用下面命令安装
1
| yum install -y unzip zip
|
然后解压即可
1
| unzip rocketmq-all-5.0.0-bin-release.zip
|
解压后就有rocketmq-all-5.0.0-bin-release
修改配置
https://blog.csdn.net/qq359605040/article/details/124272238
官网启动方法在下面,建议先修改启动配置,不然很可能启动失败
先修改nameserver
启动配置
原有配置我已经注释掉了#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
这个配置对于机器配置很高,所以我将配置改成下面的一行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| choose_gc_options() { # Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ... # '1' means releases befor Java 9 JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -r -n 's/.* version "([0-9]*).*$/\1/p') if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then #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" JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC" JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps" JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" else #JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0" JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M" fi }
|
接下来是broker
启动配置
同样被注释的是#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
把参数改小了一些
1 2 3 4 5 6 7 8 9 10 11 12 13
| choose_gc_log_directory
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g" JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m" choose_gc_options JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g" JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking" JAVA_OPT="${JAVA_OPT} -Drocketmq.client.logUseSlf4j=true" #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n" JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
|
最后修改broker
配置
https://blog.csdn.net/zhwyj1019/article/details/81082254
修改此配置主要原因是可能出现上面链接的情况
添加后面的两行配置,我这里用的是阿里云服务器IP
1 2 3 4 5 6 7 8 9
| brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH namesrvAddr=IP:9876 brokerIP1=IP
|
启动NameServer
1 2 3 4 5 6
| # $ nohup sh bin/mqnamesrv & # $ tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...
|
启动Broker+Proxy
NameServer
成功启动后,我们启动Broke
r和Proxy,5.x
版本下我们建议使用 Local
模式部署,即 Broker
和 Proxy
同进程部署。5.x
版本也支持
Broker
和 Proxy
分离部署以实现更灵活的集群能力。详情参考部署教程。
1 2 3 4 5 6
| # $ nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &
# $ tail -f ~/logs/rocketmqlogs/broker_default.log The broker[broker-a,192.169.1.2:10911] boot success...
|
RocketMQ-Dashboard
https://github.com/apache/rocketmq-dashboard
官网有docker
和源码两种部署方式,这里使用docker
部署,而且我也非常推荐这种方式,方便简单
拉取镜像
1
| docker pull apacherocketmq/rocketmq-dashboard:latest
|
启动
这里把ip
修改为阿里云服务器的ip
,因为我试了好多次总是存在RemotingConnectException
异常,目前这样做是没问题的,而且要注意这里的docker
内部端口不要改,因为这个镜像就是运行在8080
端口的,外部无所谓
1
| docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest
|
防火墙与安全组
对于我们本地搭建的服务进程,本地访问是都是无感的,但是一旦用到了云服务器或是其他虚拟机不同ip服务进程,就要注意防火墙和安全组了。
防火墙常用操作
1 2 3 4 5 6 7
| firewall-cmd --zone=public --add-port=8080/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --list-ports (查看所有开启的端口) firewall-cmd --zone=public --remove-port=8080/tcp --permanent (删除端口)
firewall-cmd --reload (重启生效配置)
|
查看端口
安全组
安全组的话针对云服务器,我们开放了防火墙后还需要到对应的云服务管理台开放对应端口,我们才可以正常访问。