- 作者:老汪软件技巧
- 发表时间: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
保存并退出 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端口号)
至此成功,访问界面如下: