• RocketMQ 系列(二) 环境搭建


     


    RocketMQ 系列(二) 环境搭建

    上一个章节对于 RocketMQ 作了一些概念上的介绍,如果你对于 RocketMQ 没有概念,不妨先看RocketMQ系列(一) 基本介绍

    这个章节主要介绍 RocketMQ 的环境搭建与安装。

    1、准备工作

    1.1、环境要求

    • Linux64 位系统
    • JDK1.8 64位及以上

    1.2、安装 JDK1.8

    RocketMQ 我在这里用的是 Linux 服务器安装的,安装之前需要先装好 JDK 。

    查询 JDK 可用版本:

    复制yum -y list java*
    

    yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令

    选择安装 JDK1.8:

    复制yum install -y java-1.8.0-openjdk.x86_64   
    

    检验安装:

    复制java -version
    

    2、安装 RocketMQ

    2.1、下载并解压

    下载地址:官网下载地址

    首先在 Linux 服务器创建文件夹用于存放即将下载的 RocketMQ

    复制1
    2
    mkdir usr/rocketmq
    cd usr/rocketmq
    

    文件夹创建好之后,从官网上复制想要下载的 RocketMQ 版本链接,我下载的版本是4.9.6,使用远程下载命令:

    复制wget https://archive.apache.org/dist/rocketmq/4.9.6/rocketmq-all-4.9.6-bin-release.zip
    

    下载完后解压:

    复制unzip rocketmq-all-4.9.6-bin-release.zip
    

    然后进入 rocketmq-all-4.9.6-bin-release 文件夹:

    复制cd rocketmq-all-4.9.6-bin-release
    

    文件夹包含了以下文件:

    image-20230817103745306

    • bin:启动脚本,包括 shell 脚本和 CMD 脚本
    • conf:实例配置文件 ,包括 broker 配置文件、logback 配置文件等
    • lib:依赖 jar 包,包括Netty、commons-lang、FastJSON等

    下载解压完成,那么剩下的就是怎么启动的问题了。

    2.2、启动 NameServer

    RocketMQ 默认的虚拟机内存较大,启动 Broker 或者 NameServer 可能会因为内存不足而导致失败,所以需要编辑这两个地方的配置文件,修改 JVM 内存大小

    编辑 runserver.sh

    复制vim bin/runserver.sh
    

    按键盘 i 切换输入模式, 修改地方如下图:

    image-20230817110335433

    参考 JVM 参数设置
    复制 -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m
    

    ESC退回普通模式,输入:wq保存文件并退出 vim 编辑。

    复制:wq
    
    启动 NameServer
    复制nohup sh bin/mqnamesrv &
    

    nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

    想知道启动成功与否,那就要看对应的启动日志,查看 NameServer日志:

    复制tail -f ~/logs/rocketmqlogs/namesrv.log
    

    如果能看到以下日志,表示启动成功:

    image-20230817111933793

    2.3、启动 Broker

    同理修改 BrokerNameServer类似,编辑 JVM 参数并启动。

    编辑 runbroker.sh

    复制vim bin/runbroker.sh
    

    要修改的就是下图位置:

    image-20230817112905116

    参考 JVM 参数设置
    复制 -server -Xms256m -Xmx256m -Xmn128m
    

    保存并退出 vim 编辑。

    修改 Broker 配置文件

    Broker需要向NameServer注册,所以还需要指定NameServer的地址。

    因为NameServerBroker 在同一台机器,所以是 localhost,NameServer 端口默认的是 9876。

    编辑broker.conf

    复制vim conf/broker.conf
    

    在文件末尾添加以下配置:

    复制1
    2
    namesrvAddr = localhost:9876
    brokerIP1 = 192.168.0.17
    

    brokerIP1记得修改成自己的服务器 IP 地址。

    启动 Broker

    启动时指定读取上面的配置文件:

    复制nohup sh bin/mqbroker -c conf/broker.conf &
    
    • -c:指定配置文件路径
    • -n:NameServer 的地址

    查看日志:

    复制tail -f ~/logs/rocketmqlogs/broker.log
    

    看到以下信息,说明已经启动成功了。

    image-20230817171811008

    2.4、测试

    启动完NameServerBroker,可以进行简单的测试。

    首先设置环境变量

    复制export NAMESRV_ADDR=localhost:9876
    

    发送消息

    复制sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
    

    然后就是接收消息

    复制sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
    

    接收到的消息截图如下:

    image-20230817175626334

    2.5、关闭 RocketMQ

    关闭NameServerBroker的命令如下:

    复制1
    2
    3
    4
    # 1.关闭NameServer
    sh bin/mqshutdown namesrv
    # 2.关闭Broker
    sh bin/mqshutdown broker
    

    2.6、开放端口

    启动完 RocketMQ后,要开放的端口一般有4个:9876,10911,10912,10909

    端口说明
    • 9876:Nameserver 的端口

    • 10911: listenPort, 是 Broker的监听端口,是 RemotingServer 服务组件使用,作为对 Producer 和 Consumer 提供服务的端口号,默认为10911,可以通过 broker.conf 配置文件修改。

      复制1
      2
      #Broker 对外服务的监听端口
      listenPort=10911
      
    • 10909:fastListenPort, 是 fastRemotingServer 服务组件使用,默认为 listenPort - 2,可以通过 broker.conf 配置文件修改。

      复制1
      2
      #主要用于slave同步master
      fastListenPort=10909
      
    • 10912:haListenPort, 是HAService服务组件使用,用于Broker的主从同步,默认为listenPort + 1,可以通过配置文件修改。

      复制1
      2
      #haService中使用
      haListenPort=10912
      
    防火墙开放端口

    查看防火墙状态:

    复制systemctl status firewalld
    

    开放上述四个端口:

    复制1
    2
    3
    4
    firewall-cmd --zone=public --add-port=9876/tcp --permanent
    firewall-cmd --zone=public --add-port=10911/tcp --permanent
    firewall-cmd --zone=public --add-port=10909/tcp --permanent
    firewall-cmd --zone=public --add-port=10912/tcp --permanent
    

    重启防火墙:

    复制firewall-cmd --reload
    

    查看防火墙所有开放的端口

    复制firewall-cmd --list-port
    
    服务器安全组开放端口

    除了防火墙开放端口之外,服务器安全组也要设置上述四个端口对外开放,我用的是华为的云服务器,在安全组里添加入方向规则,规则填写上述四个端口

    image-20230817233630745

    3、搭建可视化控制台

    前面 NameServer 和 Broker 搭建完成之后,就可以用来收发消息了,但是为了更加直观,可以搭建对应的服务控制台。

    3.1、下载

    下载地址:https://github.com/apache/rocketmq-dashboard/releases/tag/rocketmq-dashboard-1.0.0

    Github 界面如下,点击下载压缩包或直接 clone :

    image-20230819020247128

    3.2、修改配置文件

    IDEA 打开刚解压的资源,修改配置文件:

    image-20230817191850007

    修改 localhost 为自己的 Linux 服务器公网 IP 地址。

    3.3、运行 jar 包

    完善 pom.xml 下 node 资源下载:

    复制1
    2
    3
    4
    5
    <configuration>
        <nodeDownloadRoot>https://cdn.npmmirror.com/binaries/node/nodeDownloadRoot>
        <nodeVersion>v16.2.0nodeVersion>
        <yarnVersion>v1.22.10yarnVersion>
    configuration>
    

    删掉 frontend-maven-plugin 相关插件:

    image-20230819020836804 image-20230819020934531

    执行 maven 打包命令:

    复制mvn clean package -Dmaven.test.skip=true
    

    打包完成后执行 jar 包,命令如下:

    复制java -jar target/rocketmq-dashboard-1.0.0.jar
    

    我的 jar 包是在本地运行的,所以直接访问 localhost:8080,而如果把 jar 包部署在 Linux 服务器上的,就访问http://Linux服务器ip:8080

    访问界面如下:

    image-20230817234440902

    3.4、Chrome topic 查询踩坑

    原本我是非常信任 chrome 浏览器的,但是在使用控制台的 topic 查询时出现了组件的兼容性问题,导致无法触发查询,所以这次我要给它个差评。

    chrome 踩坑版本如下:

    image-20230823224831401

    在消息的查询页面,选择 TOPIC 选项,下拉选择主题及选择时间,然后点击搜索按钮,F12 打开调试窗口,可以发现没有办法进行接口调用。

    image-20230823225345341

    这个坑非常的隐蔽,因为 MESSAGE KEY 和 MESSAGE ID 两种查询的搜索组件是能正常使用的,所以没有第一时间想到是组件兼容性问题。

    我试过采用旧版本的 dashboard(2017版本),也试过下调 RocketMQ 版本(4.9.6 -> 4.7.1),又翻遍了 github 的 issue, 都没能解决这个查询问题,最后实在没办法 F12 打开调试窗口想要排查具体调用的接口,万万没想到根本就没有进行调用,顿时一阵心累。

    然后我用 Edge 浏览器执行同样的 topic 查询,搜索组件能正常调用接口:

    image-20230823230900940

    所以这里不建议用 Chrome 访问控制台了。

    到这里基本的 RocketMQ 环境搭建完毕。关于如何搭配 SpringBoot 使用下个章节进行演示。

    参考资料:

  • 相关阅读:
    [python][原创]PIL中polygon参数outline和fill理解
    深度相机介绍
    热搜榜:最热门的话题文本排行榜API接口
    NX二次开发-NX+VS写代码设断点调试技巧
    数据源报表
    全面战争三国 mod 修改
    Puppeter与Electron的结合,使用Electron创建可视化界面
    echarts和v-chart柱状图颜色渐变
    maven安装及配置(详细版)
    我在简历上写了这个,超级加分!
  • 原文地址:https://www.cnblogs.com/CF1314/p/17668305.html