• RocketMQ 安装和启动


    一、前言

    系统环境:CentOS Linux release 7.9.2009 (Core)

    RocketMQ版本:4.7.1

    我们会部署一套 RocketMQ 最小化的单机环境,包括一个 RocketMQ Namesrv 和 Broker 服务。部署完成之后,我们会测试消息的发送与消费。下面,让我们逐步开始。

    二、前置条件

    需要安装如下软件:

    JDK 8+
    Maven 3.2.X+(也可以在window环境下编译好)
    64位操作系统,建议使用 Linux / Unix / Mac
    因为我们准备直接编译 RocketMQ 源码,构建出 RocketMQ 软件包。

    三、下载源码

    打开 RocketMQ release_notes 页面,我们可以看到 RocketMQ 所有的发布版本。这里,我们选择最新的 RocketMQ 4.7.1 版本。点击进入该版本的发布页面后,我们可以看到两种发布版本:

    • Source: rocketmq-all-4.7.1-source-release.zip
    • Binary: rocketmq-all-4.7.1-bin-release.zip
    • 一般情况下,我们可以直接使用 Binary 版本,它是 RocketMQ 已经编译好,可以直接使用的 RocketMQ 软件包。

      这里,我们想编译一次 RocketMQ 源码,所以使用 Source 版本。下面,我们开始下载 RocketMQ 4.7.1 Source 源码。命令行操作如下:

      1. # 下载
      2. $ wget http://mirror.bit.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-source-release.zip
      3. # 解压
      4. $ unzip rocketmq-all-4.7.1-source-release.zip

      四、编译源码

      使用 Maven 编译 RocketMQ 源码。命令行操作如下:

      1. # 进入 RocketMQ 源码目录
      2. $ cd rocketmq-all-4.7.1-source-release
      3. # Maven 编译 RocketMQ ,并跳过测试。耐心等待...
      4. $ mvn -Prelease-all -DskipTests clean install -U

      编译完成,会看到成功提示:

      1. [INFO] ------------------------------------------------------------------------
      2. [INFO] Reactor Summary:
      3. [INFO]
      4. [INFO] Apache RocketMQ 4.7.1 4.7.1 ........................ SUCCESS [ 9.105 s]
      5. [INFO] rocketmq-logging 4.7.1 ............................. SUCCESS [ 4.194 s]
      6. [INFO] rocketmq-remoting 4.7.1 ............................ SUCCESS [ 4.715 s]
      7. [INFO] rocketmq-common 4.7.1 .............................. SUCCESS [ 9.007 s]
      8. [INFO] rocketmq-client 4.7.1 .............................. SUCCESS [ 12.394 s]
      9. [INFO] rocketmq-store 4.7.1 ............................... SUCCESS [ 6.038 s]
      10. [INFO] rocketmq-srvutil 4.7.1 ............................. SUCCESS [ 1.107 s]
      11. [INFO] rocketmq-filter 4.7.1 .............................. SUCCESS [ 2.718 s]
      12. [INFO] rocketmq-acl 4.7.1 ................................. SUCCESS [ 2.494 s]
      13. [INFO] rocketmq-broker 4.7.1 .............................. SUCCESS [ 7.686 s]
      14. [INFO] rocketmq-tools 4.7.1 ............................... SUCCESS [ 4.845 s]
      15. [INFO] rocketmq-namesrv 4.7.1 ............................. SUCCESS [ 2.617 s]
      16. [INFO] rocketmq-logappender 4.7.1 ......................... SUCCESS [ 2.709 s]
      17. [INFO] rocketmq-openmessaging 4.7.1 ....................... SUCCESS [ 2.572 s]
      18. [INFO] rocketmq-example 4.7.1 ............................. SUCCESS [ 2.967 s]
      19. [INFO] rocketmq-test 4.7.1 ................................ SUCCESS [ 4.893 s]
      20. [INFO] rocketmq-distribution 4.7.1 4.7.1 .................. SUCCESS [ 25.021 s]
      21. [INFO] ------------------------------------------------------------------------
      22. [INFO] BUILD SUCCESS
      23. [INFO] ------------------------------------------------------------------------
      24. [INFO] Total time: 01:45 min
      25. [INFO] Finished at: 2022-08-23T11:48:52+08:00
      26. [INFO] ------------------------------------------------------------------------

      在我们进入 distribution 目录下,就可以看到 RocketMQ 的发布包了。命令行操作如下:

      1. # 进入 distribution 目录下
      2. $ cd distribution/target/rocketmq-4.7.1/rocketmq-4.7.1
      3. # 当前目录为:/usr/local/src/rocketmq-all-4.7.1-source-release/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1
      4. # 打印目录
      5. [root@localhost rocketmq-4.7.1]# ll
      6. 总用量 40
      7. drwxr-xr-x 2 root root 83 823 13:14 benchmark # 性能基准测试
      8. drwxr-xr-x 3 root root 4096 823 13:14 bin # 执行脚本
      9. drwxr-xr-x 6 root root 211 823 13:14 conf # 配置文件
      10. drwxr-xr-x 2 root root 4096 823 13:14 lib # RocketMQ jar 包
      11. -rw-r--r-- 1 root root 17336 823 13:14 LICENSE
      12. -rw-r--r-- 1 root root 1338 823 13:14 NOTICE
      13. -rw-r--r-- 1 root root 5069 823 13:14 README.md
      14. [root@localhost rocketmq-4.7.1]#

      五、启动 Namesrv

      启动一个 RocketMQ Namesrv 服务。命令行操作如下:

      $ nohup sh bin/mqnamesrv &

      启动完成后,查看日志。

      1. # 查看 Namesrv 日志。
      2. $ tail -f ~/logs/rocketmqlogs/namesrv.log
      3. 2022-08-23 13:21:52 INFO main - The Name Server boot success. serializeType=JSON

      默认情况下,Namesrv 日志文件所在地址为~/logs/rocketmqlogs/namesrv.log。如果想要自定义,可以通过conf/logback_namesrv.xml配置文件来进行修改。

      六、启动 Broker

      在 conf 目录下,RocketMQ 提供了多种 Broker 的配置文件:

      • broker.conf :单主,异步刷盘。
      • 2m/ :双主,异步刷盘。
      • 2m-2s-async/ :两主两从,异步复制,异步刷盘。
      • 2m-2s-sync/ :两主两从,同步复制,异步刷盘。
      • dledger/ :Dledger 集群,至少三节点。

      这里,我们只启动一个 RocketMQ Broker 服务,所以使用 broker.conf 配置文件。命令行操作如下:

      $ nohup sh bin/mqbroker -c conf/broker.conf  -n 127.0.0.1:9876 &
      • 通过 -c 参数,配置读取的主 Broker 配置。
      • 通过 -n 参数,设置 RocketMQ Namesrv 地址。

      启动完成后,查看日志:

      1. $ tail -f ~/logs/rocketmqlogs/broker.log
      2. 2022-08-23 14:53:53 INFO main - The broker[broker-a, 192.168.1.87:10911] boot success. serializeType=JSON and name server is 127.0.0.1:9876

      注意记下 192.168.1.87:10911 后面会使用这个broker地址。

      如果提示找不到上面的日志文件,应该是没启动成功。
      先看这个日志:

      1. $ tail -f nohup.out
      2. Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000003c0000000, 17179869184, 0) failed; error='Cannot allocate memory' (errno=12)
      3. #
      4. # There is insufficient memory for the Java Runtime Environment to continue.
      5. # Native memory allocation (mmap) failed to map 17179869184 bytes for committing reserved memory.
      6. # An error report file with more information is saved as:
      7. # /usr/local/src/rocketmq-all-4.7.1-source-release/distribution/target/rocketmq-4.7.1/rocketmq-4.7.1/hs_err_pid22092.log

      应该是内存不够,RocketMQ默认用8g内存,如果你服务器的内存比较小,可以修改下bin/runbroker.sh脚本,将 Broker JVM 内存调小。如:JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g"
      再次启动broker,可以正常启动。

      默认情况下,Broker 日志文件所在地址为~/logs/rocketmqlogs/broker.log。如果想要自定义,可以通过conf/logback_broker.xml配置文件来进行修改。

      至此,我们已经完成了 RocketMQ 单机部署。下面,我们开始进行下消息的发送和消费的测试。

      七、测试发送消息

      在发送/接收消息之前,我们需要告诉客户名称服务器的位置。RocketMQ 提供了多种方法来实现这一点。为了简单起见,我们使用环境变量NAMESRV_ADDR。通过使用 bin/tools.sh工具类,实现测试发送消息。命令行操作如下:

      1. # 设置 Namesrv 服务器的地址
      2. export NAMESRV_ADDR=127.0.0.1:9876
      3. # 执行生产者 Producer 发送测试消息
      4. sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

      如果发送成功,我们会看到大量成功的发送日志。

      1. ......
      2. SendResult [sendStatus=SEND_OK, msgId=C0A808BC59F54DC639967497BA3403E6, offsetMsgId=C0A8015700002A9F00000000000316F4, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=2], queueOffset=249]
      3. SendResult [sendStatus=SEND_OK, msgId=C0A808BC59F54DC639967497BA3503E7, offsetMsgId=C0A8015700002A9F00000000000317BF, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=3], queueOffset=249]

      发送结果为 sendStatus=SEND_OK 状态,说明消息都发送成功了。

      八、测试消费消息

      通过使用bin/tools.sh工具类,实现测试消费消息。命令行操作如下:

      1. # 设置 Namesrv 服务器的地址
      2. export NAMESRV_ADDR=127.0.0.1:9876
      3. # 执行消费者 Consumer 消费测试消息
      4. sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

      如果消费成功,我们会看到大量成功的消费日志。

      1. ConsumeMessageThread_3 Receive New Messages: [MessageExt [brokerName=broker-a, queueId=3, storeSize=203, queueOffset=749, sysFlag=0, bornTimestamp=1661239759930, bornHost=/192.168.1.87:46058, storeTimestamp=1661239759930, storeHost=/192.168.1.87:10911, msgId=C0A8015700002A9F0000000000094808, commitLogOffset=608264, bodyCRC=1359908749, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1661239759931, UNIQ_KEY=C0A808BC5CC04DC63996749EBC3A03E6, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 57, 56], transactionId='null'}]]
      2. ConsumeMessageThread_19 Receive New Messages: [MessageExt [brokerName=broker-a, queueId=0, storeSize=203, queueOffset=749, sysFlag=0, bornTimestamp=1661239759931, bornHost=/192.168.1.87:46058, storeTimestamp=1661239759931, storeHost=/192.168.1.87:10911, msgId=C0A8015700002A9F00000000000948D3, commitLogOffset=608467, bodyCRC=638172955, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1661239759932, UNIQ_KEY=C0A808BC5CC04DC63996749EBC3B03E7, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 57, 57], transactionId='null'}]]

      通过ConsumeMessageThread_13ConsumeMessageThread_19线程名,我们可以看出,目前是进行并发消费消息。

      九、关闭服务器

      1. # sh bin/mqshutdown broker //停止 broker
      2. # sh bin/mqshutdown namesrv //停止 nameserver

      关闭成功后如下:

      1. [root@localhost rocketmq-4.7.1]# sh bin/mqshutdown broker
      2. The mqbroker(22848) is running...
      3. Send shutdown request to mqbroker(22848) OK
      4. [root@localhost rocketmq-4.7.1]# sh bin/mqshutdown namesrv
      5. The mqnamesrv(20705) is running...
      6. Send shutdown request to mqnamesrv(20705) OK

      十、常命令

      上面几个启动和关闭 name server 和 broker 的就不再说了,先进入bin目录:# cd bin

      1. 查看集群情况 ./mqadmin clusterList -n 127.0.0.1:9876
      2. 查看 broker 状态 ./mqadmin brokerStatus -n 127.0.0.1:9876 -b 192.168.1.87:10911(注意换成你的 broker 地址)
      3. 查看 topic 列表 ./mqadmin topicList -n 127.0.0.1:9876
      4. 查看 topic 状态./mqadmin topicStatus -n 127.0.0.1:9876 -t MyTopic(换成你想查询的 topic)
      5. 查看 topic 路由./mqadmin topicRoute -n 127.0.0.1:9876 -t MyTopic
  • 相关阅读:
    docker 安装 MySQL5.7
    SpringMVC Day 04 : 数据绑定
    Vue语法模板续篇
    2022最新IntellJ IDEA诺依开发部署文档
    做机器人开发,你一定绕不开的模块!
    软件测试面试题及答案解析,2022最强版
    Azkaban (二) --------- Azkaban 入门
    封装了一个中间放大效果的iOS轮播视图
    实时即未来,车联网项目之电子围栏分析【六】
    【LeetCode】Day139-打家劫舍 III
  • 原文地址:https://blog.csdn.net/qq_30665009/article/details/126487766