前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手摸手教你在腾讯云CVM搭建RocketMQ

手摸手教你在腾讯云CVM搭建RocketMQ

原创
作者头像
GoBoy
发布2024-06-13 19:08:34
740
发布2024-06-13 19:08:34
举报
文章被收录于专栏:GoboyGoboy

本文看点

  • ├──背景介绍
  • ├──团队介绍
  • ├──核心概念

准备工作

  • ├──环境要求
  • ├──安装 JDK1.8

安装 RocketMQ

  • ├──下载并解压
  • ├──NameServer
  • ├──Broker
  • ├──测试
  • ├──关闭 RocketMQ
  • ├──开放端口

可视化控制台

  • ├──下载资源
  • ├──修改配置
  • ├──工程打包
  • ├──使用说明
  • ├──运行脚本
  • ├──使用说明
  • ├──错误说明


RocketMQ是一款开源的、分布式的消息中间件系统,由阿里巴巴开发并贡献给Apache基金会,目前是Apache项目之一。它具有高可靠性、高性能、可扩展性和灵活的特点,被广泛应用于大规模分布式系统的消息通信场景

背景介绍

RocketMQ最初由阿里巴巴开发,旨在提供高吞吐量、高可靠性的消息传递服务。它是一个可水平扩展的、具有低延迟和高可用性的分布式消息队列系统。RocketMQ经历了淘宝双十一的洗礼,证明了其在处理大规模消息流和高并发场景下的能力

团队介绍

  • 林清山(花名:隆基):Apache RocketMQ联合创始人,阿里云资深技术专家,阿里云消息产品线负责人。他是国际消息领域的专家,致力于消息、实时计算、事件驱动等方向的研究与探索,推进RocketMQ云原生架构、超融合架构的演进。
  • 周新宇(花名:尘央):Apache RocketMQ联合创始人,阿里云高级技术专家,阿里云消息队列RocketMQ研发负责人。他目前主要负责Apache RocketMQ 5.0面向消息和事件的架构升级,以及在阿里云的商业化落地。

Apache RocketMQ 核心概念的中文介绍:

Topic(话题)

表示一类消息的集合。每个 Topic 包含若干条消息,是 RocketMQ 进行消息订阅和发布的基本单位。

MessageType(消息类型)

用于区分不同类别的消息,例如普通消息、顺序消息、事务消息等。

MessageQueue(消息队列)

用于存储消息的物理地址。每个 Topic 的消息地址存储于多个消息队列中。

Message(消息)

消息系统所传输信息的物理载体,是生产和消费数据的最小单位。每条消息必须属于一个 Topic。

MessageView(消息视图)

消息视图通常用于管理和监控消息内容的显示视图,便于开发者或管理员查看消息详情。

MessageTag(消息标签)

为消息设置的标志,用于同一 Topic 下区分不同类型的消息。标签能够优化查询系统,并实现更灵活的消费逻辑。

MessageOffset(消息偏移量)

消息在队列中的位置标识,用于记录和管理消息的消费进度。

ConsumerOffset(消费者补偿)

消费者的消费进度偏移量,用于记录消费者组中每个消费者的消费位置。

MessageKey(消息键)

消息的业务标识键,系统提供通过消息键查询消息的功能。

Producer(生产者)

负责生产消息并将消息发送到 Broker 服务器。

TransactionChecker(事务检查器)

用于检查和管理事务消息状态的组件,确保消息事务的一致性。

ConsumerGroup(消费者组)

一类消费者的集合,这类消费者通常消费同一类消息并且消费逻辑一致。

Consumer(消费者)

负责从 Broker 服务器拉取和消费消息的组件。

Subscription(订阅)

消费者对特定 Topic 消息的订阅关系,定义消费者对消息的消费范围和逻辑。

准备工作

环境要求

  • 腾讯云 CVM
  • 64-bit JDK 1.8+

安装 JDK1.8

官网下载1.8

创建一个你喜欢的文件夹名称;

代码语言:shell
复制
mkdir /usr/local/java

解压JDK的你喜欢的文件夹目录下;

代码语言:shell
复制
tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java/

配置环境变量;

代码语言:shell
复制
vim /etc/profile

在文件末尾添加上环境变量;

代码语言:shell
复制
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

刷新配置的环境变量生效;

代码语言:shell
复制
source /etc/profile 

查看是否安装成功;

代码语言:shell
复制
javac
代码语言:shell
复制
java -version

安装 RocketMQ

下载并解压

下载地址:官网下载地址

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

代码语言:shell
复制
mkdir /usr/rocketmq
cd /usr/rocketmq

文件夹创建好之后,从官网下载你喜欢的 RocketMQ 版本,我下载的版本是4.9.6,你要也喜欢,那便是极好的;

代码语言:shell
复制
wget https://archive.apache.org/dist/rocketmq/4.9.6/rocketmq-all-4.9.6-bin-release.zip

下载完后解压;

代码语言:shell
复制
unzip rocketmq-all-4.9.6-bin-release.zip

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

代码语言:shell
复制
cd rocketmq-all-4.9.6-bin-release

文件夹包含了以下文件:

NameServer

RocketMQ 默认的虚拟机内存较大,需要修改 JVM 内存大小,否则 Broker 或者 NameServer 可能会因为内存不足而导致启动失败;

NameServer 是 RocketMQ 系统中的一个独立且轻量级的服务,主要用于管理和提供 Broker 的路由信息。它是一个无状态的、对称的服务,可以部署多个实例以提高系统的可用性和可靠性。

编辑 runserver.sh

代码语言:shell
复制
vim bin/runserver.sh

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

JVM 参数设置

代码语言:shell
复制
 -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m

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

代码语言:shell
复制
:wq

启动

代码语言:shell
复制
nohup sh bin/mqnamesrv &

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

查看日志

代码语言:shell
复制
tail -f ~/logs/rocketmqlogs/namesrv.log

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

Broker

Broker 是 RocketMQ 系统中用于存储和传输消息的关键节点。它在整个消息传输过程中起到了中转站的作用,确保消息能够可靠地从生产者传递到消费者。

同理 BrokerNameServer类似;

编辑 runbroker.sh

代码语言:shell
复制
vim bin/runbroker.sh

修改的就是下图位置:

JVM 参数设置

代码语言:shell
复制
 -server -Xms256m -Xmx256m -Xmn128m

保存并退出 vim 编辑。

修改 Broker 配置

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

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

编辑broker.conf

代码语言:shell
复制
vim conf/broker.conf

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

代码语言:shell
复制
namesrvAddr = localhost:9876
brokerIP1 = 192.168.0.1

brokerIP1修改成自己的服务器 IP 地址(不是外网IP)。

启动

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

代码语言:shell
复制
nohup sh bin/mqbroker -c conf/broker.conf &

查看日志

代码语言:shell
复制
tail -f ~/logs/rocketmqlogs/broker.log

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

测试

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

发送消息

代码语言:shell
复制
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

接收消息

代码语言:shell
复制
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

接收到的消息截图如下:

关闭 RocketMQ

关闭NameServerBroker的命令如下:

代码语言:shell
复制
# 关闭NameServer
sh bin/mqshutdown namesrv
# 关闭Broker
sh bin/mqshutdown broker

开放端口

启动完 RocketMQ 后,通常需要开放以下四个端口:

9876

  • 这个端口用于 Name Server,负责提供路由信息,让 Producer 和 Consumer 可以找到相应的 Broker。

10911

  • 这个端口用于 Broker 的外部通信,Producer 和 Consumer 通过这个端口与 Broker 进行消息的发送和接收。

10912

  • 这个端口用于 Broker 内部通信,主要用于 Broker 集群中的主从同步。

10909

  • 这个端口用于 Broker 的管理接口,通常用于管理工具或监控工具连接到 Broker,以执行管理和监控操作。

这些端口需要在防火墙或网络策略中配置开放,以确保 RocketMQ 系统能够正常运行并进行必要的通信。

可视化控制台

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

下载资源

下载地址:https://rocketmq.apache.org/zh/download/#rocketmq-dashboard

修改配置

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

修改 namesrvAddr 服务器公网 IP 地址。

工程打包

使用 IDEA 打包package,或者 执行 maven 打包命令:

代码语言:javascript
复制
mvn clean package -Dmaven.test.skip=true

打包完成后,请上传至服务器。

下面是一个包含启动、关闭和重启功能的脚本,带有中文注释。将以下内容保存为 rocketmq_dashboard.sh

代码语言:shell
复制
#!/bin/bash

# 启动 RocketMQ Dashboard
start_dashboard() {
  nohup java -jar /path/to/rocketmq-dashboard-1.0.0.jar > dashboard.log 2>&1 &
  echo "RocketMQ Dashboard 已启动。"
}

# 停止 RocketMQ Dashboard
stop_dashboard() {
  # 查找运行中的 RocketMQ Dashboard 的进程 ID (PID)
  PID=$(ps -ef | grep rocketmq-dashboard-1.0.0.jar | grep -v grep | awk '{print $2}')

  # 检查是否找到 PID
  if [ -z "$PID" ]; then
    echo "RocketMQ Dashboard 未运行。"
  else
    # 杀死进程
    kill -9 $PID
    echo "RocketMQ Dashboard 已停止。"
  fi
}

# 重启 RocketMQ Dashboard
restart_dashboard() {
  stop_dashboard
  start_dashboard
  echo "RocketMQ Dashboard 已重启。"
}

# 检查传递的参数,调用相应的函数
case "$1" in
  start)
    start_dashboard
    ;;
  stop)
    stop_dashboard
    ;;
  restart)
    restart_dashboard
    ;;
  *)
    echo "用法: $0 {start|stop|restart}"
    exit 1
esac

使用说明

确保脚本具有可执行权限。可以使用以下命令赋予权限:

代码语言:shell
复制
chmod +x rocketmq_dashboard.sh

运行脚本

启动 Dashboard:

代码语言:shell
复制
sh rocketmq_dashboard.sh start

停止 Dashboard:

代码语言:shell
复制
sh rocketmq_dashboard.sh stop

重启 Dashboard:

代码语言:shell
复制
sh rocketmq_dashboard.sh restart

请将 /path/to/rocketmq-dashboard-1.0.0.jar 替换为你的 rocketmq-dashboard JAR 文件的实际路径。nohup 命令确保进程在后台运行,即使关闭终端也不会影响它。输出会重定向到 dashboard.log 文件。

错误说明

如果出现类似一下的错误通常是由于脚本文件包含 Windows 风格的换行符(CRLF)而不是 Unix 风格的换行符(LF)导致的。你可以使用 dos2unix 工具来转换脚本文件的换行符格式,或者在保存文件时选择 Unix 风格的换行符。

代码语言:shell
复制
rocketmq_dashboard.sh: line 2: $'\r': command not found
rocketmq_dashboard.sh: line 4: syntax error near unexpected token `$'{\r''
'ocketmq_dashboard.sh: line 4: `start_dashboard() {

使用 dos2unix 转换文件格式

代码语言:shell
复制
dos2unix rocketmq_dashboard.sh

如果你没有安装 dos2unix,可以使用以下命令安装它:

代码语言:shell
复制
sudo apt-get install dos2unix # 对于 Debian/Ubuntu 系统
sudo yum install dos2unix     # 对于 CentOS/RHEL 系统

手动转换文件格式

你也可以手动转换文件格式。以下是使用 sed 命令的一种方法:

代码语言:shell
复制
sed -i 's/\r$//' rocketmq_dashboard.sh

确保脚本文件使用 Unix 换行符(LF)

重新创建脚本文件时,确保使用 Unix 换行符(LF)而不是 Windows 换行符(CRLF)。可以在 Unix/Linux 系统或支持 Unix 换行符的文本编辑器中重新创建脚本。

现在通过上面的启动脚本,启动我们的Jar包吧,启动成功后访问http://服务器ip:8080(记得开放8080端口号)

至此成功,访问界面如下:

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 团队介绍
  • 准备工作
    • 环境要求
      • 安装 JDK1.8
      • 安装 RocketMQ
        • 下载并解压
        • NameServer
          • JVM 参数设置
            • 启动
              • 查看日志
              • Broker
                • JVM 参数设置
                  • 修改 Broker 配置
                    • 启动
                      • 查看日志
                      • 测试
                        • 发送消息
                          • 接收消息
                          • 关闭 RocketMQ
                          • 开放端口
                          • 可视化控制台
                            • 下载资源
                              • 修改配置
                                • 工程打包
                                  • 使用说明
                                    • 运行脚本
                                      • 错误说明
                                        • 使用 dos2unix 转换文件格式
                                        • 手动转换文件格式
                                        • 确保脚本文件使用 Unix 换行符(LF)
                                    相关产品与服务
                                    消息队列 CMQ
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档