• 作者:老汪软件技巧
  • 发表时间:2024-11-08 15:05
  • 浏览量:

本文看点

准备工作

安装 RocketMQ

可视化控制台

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

背景介绍

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

团队介绍

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

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

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

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

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

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

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

MessageOffset(消息偏移量)消息在队列中的位置标识,用于记录和管理消息的消费进度。

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

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

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

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

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

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

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

准备工作环境要求安装 JDK1.8

官网下载1.8

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

mkdir /usr/local/java

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

tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java/

配置环境变量;

vim /etc/profile

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

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

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

source /etc/profile 

查看是否安装成功;

javac

java -version

安装 RocketMQ下载并解压

下载地址:官网下载地址

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

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

文件夹包含了以下文件:

请在此添加图片描述

NameServer

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

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

编辑 runserver.sh

vim bin/runserver.sh

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

请在此添加图片描述

JVM 参数设置

 -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m

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

:wq

启动

nohup sh bin/mqnamesrv &

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

查看日志

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

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

请在此添加图片描述

Broker

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

同理 Broker与NameServer类似;

编辑 runbroker.sh

vim bin/runbroker.sh

修改的就是下图位置:

请在此添加图片描述

JVM 参数设置

 -server -Xms256m -Xmx256m -Xmn128m

腾讯云教学_腾讯云搭建socks5_

保存并退出 vim 编辑。

修改 Broker 配置

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

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

编辑broker.conf

vim conf/broker.conf

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

namesrvAddr = localhost:9876
brokerIP1 = 192.168.0.1

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

启动

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

nohup sh bin/mqbroker -c conf/broker.conf &

查看日志

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

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

请在此添加图片描述

测试

启动完NameServer及Broker进行简单的测试。

发送消息

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

接收消息

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

接收到的消息截图如下:

请在此添加图片描述

关闭 RocketMQ

关闭NameServer及Broker的命令如下:

# 关闭NameServer
sh bin/mqshutdown namesrv
# 关闭Broker
sh bin/mqshutdown broker

开放端口

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

9876

10911

10912

10909

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

可视化控制台

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

下载资源

下载地址:

请在此添加图片描述

修改配置

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

请在此添加图片描述

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

工程打包

请在此添加图片描述

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

mvn clean package -Dmaven.test.skip=true

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

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

#!/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

使用说明

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

chmod +x rocketmq_dashboard.sh

运行脚本

启动 Dashboard:

sh rocketmq_dashboard.sh start

停止 Dashboard:

sh rocketmq_dashboard.sh stop

重启 Dashboard:

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 风格的换行符。

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 转换文件格式

dos2unix rocketmq_dashboard.sh

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

sudo apt-get install dos2unix # 对于 Debian/Ubuntu 系统
sudo yum install dos2unix     # 对于 CentOS/RHEL 系统

手动转换文件格式

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

sed -i 's/\r$//' rocketmq_dashboard.sh

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

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

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

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

请在此添加图片描述


上一条查看详情 +Linux系统-rocky系统安装
下一条 查看详情 +没有了