RocketMQ 安装和启动

2023-10-26

一、前言

系统环境: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 源码。命令行操作如下:

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

    四、编译源码

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

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

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

    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary:
    [INFO]
    [INFO] Apache RocketMQ 4.7.1 4.7.1 ........................ SUCCESS [  9.105 s]
    [INFO] rocketmq-logging 4.7.1 ............................. SUCCESS [  4.194 s]
    [INFO] rocketmq-remoting 4.7.1 ............................ SUCCESS [  4.715 s]
    [INFO] rocketmq-common 4.7.1 .............................. SUCCESS [  9.007 s]
    [INFO] rocketmq-client 4.7.1 .............................. SUCCESS [ 12.394 s]
    [INFO] rocketmq-store 4.7.1 ............................... SUCCESS [  6.038 s]
    [INFO] rocketmq-srvutil 4.7.1 ............................. SUCCESS [  1.107 s]
    [INFO] rocketmq-filter 4.7.1 .............................. SUCCESS [  2.718 s]
    [INFO] rocketmq-acl 4.7.1 ................................. SUCCESS [  2.494 s]
    [INFO] rocketmq-broker 4.7.1 .............................. SUCCESS [  7.686 s]
    [INFO] rocketmq-tools 4.7.1 ............................... SUCCESS [  4.845 s]
    [INFO] rocketmq-namesrv 4.7.1 ............................. SUCCESS [  2.617 s]
    [INFO] rocketmq-logappender 4.7.1 ......................... SUCCESS [  2.709 s]
    [INFO] rocketmq-openmessaging 4.7.1 ....................... SUCCESS [  2.572 s]
    [INFO] rocketmq-example 4.7.1 ............................. SUCCESS [  2.967 s]
    [INFO] rocketmq-test 4.7.1 ................................ SUCCESS [  4.893 s]
    [INFO] rocketmq-distribution 4.7.1 4.7.1 .................. SUCCESS [ 25.021 s]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 01:45 min
    [INFO] Finished at: 2022-08-23T11:48:52+08:00
    [INFO] ------------------------------------------------------------------------

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

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

    五、启动 Namesrv

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

    $ nohup sh bin/mqnamesrv &

    启动完成后,查看日志。

    # 查看 Namesrv 日志。
    $ tail -f ~/logs/rocketmqlogs/namesrv.log
    
    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 地址。

    启动完成后,查看日志:

    $ tail -f ~/logs/rocketmqlogs/broker.log
    
    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地址。

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

    $ tail -f nohup.out
    
    Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000003c0000000, 17179869184, 0) failed; error='Cannot allocate memory' (errno=12)
    #
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Native memory allocation (mmap) failed to map 17179869184 bytes for committing reserved memory.
    # An error report file with more information is saved as:
    # /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工具类,实现测试发送消息。命令行操作如下:

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

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

    ......
    SendResult [sendStatus=SEND_OK, msgId=C0A808BC59F54DC639967497BA3403E6, offsetMsgId=C0A8015700002A9F00000000000316F4, messageQueue=MessageQueue [topic=TopicTest, brokerName=broker-a, queueId=2], queueOffset=249]
    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工具类,实现测试消费消息。命令行操作如下:

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

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

    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'}]]
    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线程名,我们可以看出,目前是进行并发消费消息。

    九、关闭服务器

    # sh bin/mqshutdown broker  //停止 broker
    
    # sh bin/mqshutdown namesrv //停止 nameserver

    关闭成功后如下:

    [root@localhost rocketmq-4.7.1]# sh bin/mqshutdown broker
    The mqbroker(22848) is running...
    Send shutdown request to mqbroker(22848) OK
    
    [root@localhost rocketmq-4.7.1]# sh bin/mqshutdown namesrv
    The mqnamesrv(20705) is running...
    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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RocketMQ 安装和启动 的相关文章

随机推荐

  • Latex编译中文出现的问题

    Latex编译中文出现的问题 记录一下使用latex编译中文遇到的一些问题 本文是在win11系统下使用的TexStudio MikTex组合 编译使用的是pdfLatex 编辑器的设置 首先会发现 编辑器中的中文字符全是乱码 这时 在Te
  • 应用于标签的伪类选择器(link、visited、active、hover)

    CSS3根据选择符的用途可以把选择器分为标签选择器 类选择器 ID选择器 全局选择器 组合选择器 继承选择器和伪类选择器等 伪类选择符定义的样式最常应用于 a 标签上 它表示4种不同的状态 link 未访问链接 visited 已访问链接
  • GnuWin32的安装与使用

    使用过Linux的伙计估计都会喜欢上linux各种各样强大的命令如 find vim cp mv wget curl grep ls等等 而GnuWin32使windows用户可以在命令行窗口中使用各种各样的linux命令 就跟使用普通的w
  • lighttpd不支持Expect: 100-continue的解决办法

    由于lighttpd1 4 21之前的版本不支持Expect 100 continue 所以有可能访问出现 HTTP 1 1 417 Expectation Failed 等错误提示 搜集整理了很多解决方法 如下 1 升级到 lighttp
  • Chrome:将禁用修改document.domain以放宽同源策略

    你好 我是tiantian 几天前 Chrome developer 博客发布了这么一篇文章 大致意思是 Chrome未来将禁用修改document domain 如果你的网站依赖于设置document domain 来解决跨域的问题 那么
  • ubuntu安装elasticsearch和head插件(所有可能出现的问题解决)超详细

    一 单例安装 首先去官网 elastic co 下载tar gz的压缩包 或者使用命令行下载 wget https artifacts elastic co downloads elasticsearch elasticsearch 6 7
  • 当鼠标光标放在一张图片上,如何显示另一张图片?

    我们会遇到一种情境 这种情境是当正常打开一个页面 有文字配有图片 可是当鼠标的光标移动到这张图片上时 会显示另一张图片 这种效果应该怎么做 在学习html和css阶段的程序员 我们可以使用hover来对图片进行处理 hover的基本意思为选
  • 【c语言】两个栈实现一个队列

    两个栈实现一个队列 核心思想 模拟出队列先进先出的数据结构 假设有两个栈input和output input模拟栈的数据插入 当需要模拟出队列操作时 input栈中的A B C D会按照D C B A的顺序进入栈output 只要outpu
  • TensorRT部署(图像分类)之engine生成及反序列化推理(第二讲)

    1 日志文件类创建 class TRTLogger public nvinfer1 ILogger public virtual void log Severity severity nvinfer1 AsciiChar const msg
  • adams怎么打开自带模型_少了这套Enscape专属模型库,你装的Enscapen废了一半

    文末领取此套Enscape离线资源库 真实植物 Enscape 我们一直都在用 大家也都很熟悉 而且Enscape作为渲染界的劳模 几乎可以保持月更的节奏 其操作简单 容易上手 渲染真实越来越多的被使用 虽然Enscape很好用 比Lumi
  • SAP MM学习笔记17-在库品目评价中的标准原价 S 和移动平均价格 V

    SAP中有2种价格 标准原价 S 和 移动平均价格 V 1 标准原价 S 2 移动平均价格 V 在MM03 会计1 Tab中 现行评价区域中 有原价管理区分 比如下面这个物料 100 100 它的原价管理区分是 S 它的合计额 就是 标准原
  • getch()、_sleep() 函数的正确用法

    前段时间由于需要 写了一段代码 用到了函数 getch 但是当时出错了 提示该标识符未被定义 一时无解 后来又有一个朋友 问我怎么将一个字符串中的字符以一种动态的方式进行输出 我当时告诉他的是使用 sleep 函数 也没有细想 后来发现 根
  • 反汇编 之thiscall约定

    thiscall是C 中的非静态类成员函数的默认调用约定 对象的每个函数隐含接收this参数 采用thiscall约定时 函数的参数按照从右到左的顺序入栈 被调用的函数在返回前清理传送参数的栈 include
  • jetson orin+livox mid-70+imu+云台相机联合标定和数据采集

    将之前无人机上的x86多源数据采集和联合标定算法重建在新板子jetson orin上 解决之前多传感器采集数据时间戳没对齐的问题 1 准备工作 安装ros环境 推荐小鱼 http fishros com fish home 大佬的包避免了自
  • 王昊奋:大规模知识图谱技术

    主讲嘉宾 王昊奋 主持人 阮彤 承办 中关村大数据产业联盟 嘉宾简介 王昊奋 华东理工大学讲师 上海交通大学计算机应用专业博士 对语义搜索 图数据库以及Web挖掘与信息抽取有浓厚的兴趣 在博士就读期间发表了30余篇国际顶级会议和期刊论文 长
  • TCP&UDP测试工具的使用

    一 TCP服务测试 1 在电脑上打开测试工具 2 该测试工具分为客户端和服务器两类 首先创建一个服务端 3 默认端口号点击确定 4 点击启动服务器 此时我们可以通过外部客户端与该服务器相连 5 在此 我们重新打开一次软件 模拟客户端并与服务
  • pandas基础入门之数据修改与基本运算

    1 数据复制 直接赋值 直接赋值的话 只是复制的元数据 行列索引 但是元素还是存储在相同内存位置 对元素进行修改会影响另外一个 import pandas as pd import numpy as np df pd DataFrame n
  • 偏微分方程 基础知识(线性偏微分方程+常系数线性偏微分方程)

    偏微分方程 指含有多元未知函数 u u x x
  • python爬虫connection error报错time read out

    TOC python 爬虫 ConnectionError HTTPConnectionPool host port 80 Read timed out python 爬虫 ConnectionError HTTPConnectionPoo
  • RocketMQ 安装和启动

    一 前言 系统环境 CentOS Linux release 7 9 2009 Core RocketMQ版本 4 7 1 我们会部署一套 RocketMQ 最小化的单机环境 包括一个 RocketMQ Namesrv 和 Broker 服