Linux环境下配置安装RocketMQ

1.下载

官网下载:下载链接
根据需要下载自己需要的版本、本文使用下载的是:4.7.0版本
Linux环境下配置安装RocketMQ_第1张图片
Linux环境下配置安装RocketMQ_第2张图片

2.安装

创建目录,使用ftp工具上传下载的包到上面创建的目录下。

cd /usr/local
mkdir rocketmq-all-4.7.0

注意:rocketmq 需要 Linux 上安装JDK,版本 1.8 以上,如果你 Linux 上已经配置了 Java 环境可跳过,未安装请自行安装。
在这里插入图片描述
上传之后进行解压:

unzip rocketmq-all-4.7.0-bin-release.zip

Linux环境下配置安装RocketMQ_第3张图片

解压后目录结构
benchmark:这里面就是一些可以直接运行,进行测试的 sh 文件
bean:该目录是比较常用的,里面是一些可执行文件
conf:这里面就是一些配置文件
lib:就是 mq 所依赖的第三方 jar 包

3.启动

3.1 启动:NameServer

进入 bin 目录 cd bin/

  nohup ./mqnamesrv & 
  或者
  nohup sh bin/mqnamesrv &

查看日志

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

#出现下面信息成功

  The Name Server boot success...

Linux环境下配置安装RocketMQ_第4张图片

3.2 启动:Broker

在启动之前先修改两个配置

cd bin

vim runserver.sh

mq 默认需要的内存是比较大的,根据自己 Linux 的内存大小去设置,我这里就改成 256 256 128 了

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

Linux环境下配置安装RocketMQ_第5张图片

cd bin

vim runserver.sh

调整小点

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

Linux环境下配置安装RocketMQ_第6张图片
注意:这里很坑爹
安装rocketMQ的server后,启动一切正常,但是使用客户端连接时报错、很纳闷这个172.17.42.1是从哪里来的。

Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.42.1:10911> failed

检查服务器上,这个ip是docker0的虚拟网卡的网关,但是启动rocketMQ时并没有设置这个ip,检查broker.conf和其他配置文件没有发现可以配置ip地址的地方,官方文档里也没有说明。重新编译并没有解决问题,于是把docker网卡停掉,连接还是报同样的错。

因为broker部署在虚拟机,并且虚拟双网卡,client无法正常连接服务端(不是部署到虚拟机的可能不会遇到这个问题、等遇到这个问题在解决)

解决办法:修改broker.conf配置文件添加IP、在conf文件中加入两行(建议直接复制,然后再修改为自己的IP),一定是大写IP!!!!!
Linux环境下配置安装RocketMQ_第7张图片
Linux环境下配置安装RocketMQ_第8张图片

namesrvAddr = 127.0.0.1:9876
brokerIP1 = 192.168.232.143

启动Broker

nohup ./mqbroker -n localhost:9876 ../conf/broker.conf &

查看日志

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

看到下面信息代表成功

  The broker[%s, 172.30.30.233:10911] boot success...

注意:不要把打印日志的这个窗口关闭、窗口关闭进程结束了

4.测试

新开开了两个窗口,都在 mq 的 bin 目录下,一个用于发送消息,一个用于接收消息。

前面开的窗口不要关闭、不要关闭。
Linux环境下配置安装RocketMQ_第9张图片
发送消息:

# 声明一个 namesrv 的地址
export NAMESRV_ADDR=localhost:9876
# 发送消息
./tools.sh org.apache.rocketmq.example.quickstart.Producer
# 出现下面信息成功发送
  SendResult [sendStatus=SEND_OK, msgId= ...

接收消息:

# 声明一个 namesrv 的地址
export NAMESRV_ADDR=localhost:9876
# 发送消息
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
# 出现下面信息成功消费
 ConsumeMessageThread_%d Receive New Messages: [MessageExt...

5.安装控制台

下载源码:链接
Linux环境下配置安装RocketMQ_第10张图片
Linux环境下配置安装RocketMQ_第11张图片
修改配置信息:进入到解压的文件夹下修改 application.yml 文件,根据情况修改,注意端口冲突问题。
Linux环境下配置安装RocketMQ_第12张图片
Linux环境下配置安装RocketMQ_第13张图片
编译源代码、输入cmd进入到目录下(maven已经按照配置完成)
Linux环境下配置安装RocketMQ_第14张图片
Linux环境下配置安装RocketMQ_第15张图片

mvn clean package -Dmaven.test.skip=true

打包成功之后会生成target目录
Linux环境下配置安装RocketMQ_第16张图片
Linux环境下配置安装RocketMQ_第17张图片

如果打包中报错:

[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.11.3:install-node-and-yarn (install node and yarn) on project rocketmq-dashboard: Could not download Yarn: Could not download https://github.com/yarnpkg/yarn/releases/download/v1.22.10/yarn-v1.22.10.tar.gz: Connect to github.com:443 [github.com/20.205.243.166] failed: Connection timed out: connect -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

访问
https://github.com/yarnpkg/yarn/releases/download/v1.22.10/yarn-v1.22.10.tar.gz
手动下载、下载完成后找到maven配置的仓库地址下面的\com\github\eirslett\yarn\1.22.10、手动放进去。如果目录不存在手动创建。

cd  /usr/local/rocketmq-all-4.7.0

#创建目录存放编译好的控制台jar包
mkdir  rocketmq-console

使用ftp工具上传编译后的jar包到创建的目录下:
Linux环境下配置安装RocketMQ_第18张图片

cd /usr/local/rocketmq-all-4.7.0/rocketmq-console

#启动jar包
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

浏览器访问:注意打包编译源码之前配置文件自己修改的是什么这里端口就是什么。
这里没有设置账号密码、可以直接访问。
Linux环境下配置安装RocketMQ_第19张图片

5.控制台开启密码登录功能

修改下载的源码的配置文件
Linux环境下配置安装RocketMQ_第20张图片
打开密码配置文件
Linux环境下配置安装RocketMQ_第21张图片
默认users.properties配置如下,需要修改用户名和密码

# Define Admin
admin=admin,1
 
# Define Users
user1=user1
user2=user2

配置用户名和密码

# Define Admin
admin=新密码,1
 
# Define Users
用户名=新密码

修改配置之后、需要重新编译打包、在上传到服务器对应目录下。
Linux环境下配置安装RocketMQ_第22张图片
Linux环境下配置安装RocketMQ_第23张图片
账号admin密码123456

6.启停脚本

启动脚本:NameServer、Broker、console全部启动
vim startMq.sh

#!/bin/bash

rocketmq_path="/usr/local/rocketmq-all-4.7.0/rocketmq-all-4.7.0-bin-release"
dashboard_path="/usr/local/rocketmq-all-4.7.0/rocketmq-console/rocketmq-dashboard-1.0.1-SNAPSHOT.jar"

function log_info() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $@"
}

function log_error() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $@" >&2
}

# 启动 mqnamesrv
nohup sh "$rocketmq_path/bin/mqnamesrv" > /dev/null 2>&1 &
log_info "Starting mqnamesrv..."

# 等待 mqnamesrv 启动完成
sleep 5

# 检查 mqnamesrv 是否成功启动
if ! pgrep -f "$rocketmq_path/bin/mqnamesrv" >/dev/null; then
  log_error "Failed to start mqnamesrv."
  exit 1
fi

log_info "mqnamesrv started successfully."

# 启动 mqbroker
nohup sh "$rocketmq_path/bin/mqbroker" -n localhost:9876  -c "$rocketmq_path/conf/broker.conf" > /dev/null 2>&1 &

log_info "Starting mqbroker..."

# 等待 mqbroker 启动完成
sleep 5

# 检查 mqbroker 是否成功启动
if ! pgrep -f "$rocketmq_path/bin/mqbroker" >/dev/null; then
  log_error "Failed to start mqbroker."
  exit 1
fi

log_info "mqbroker started successfully."

# 启动 RocketMQ Dashboard
nohup java -jar "$dashboard_path" > /dev/null 2>&1 &
log_info "mqconsole started successfully..."


# 如果需要,在此处添加其他逻辑和命令

exit 0

停止脚本:NameServer、Broker、console全部停止
vim stopMq.sh

#!/bin/bash
sh /usr/local/rocketmq-all-4.7.0/rocketmq-all-4.7.0-bin-release/bin/mqshutdown broker
sh /usr/local/rocketmq-all-4.7.0/rocketmq-all-4.7.0-bin-release/bin/mqshutdown namesrv

# 指定进程名称
process_name="java -jar /usr/local/rocketmq-all-4.7.0/rocketmq-console/rocketmq-dashboard-1.0.1-SNAPSHOT.jar"

# 查询进程是否存在
pid=$(pgrep -f "$process_name")
if [ -n "$pid" ]; then
  echo "Process is running with PID: $pid"
  echo "Attempting to stop the process..."
  # 关闭进程
  kill "$pid"
  sleep 5 # 等待一段时间以确保进程已经停止
  # 再次查询进程是否存在
  pid=$(pgrep -f "$process_name")
  if [ -n "$pid" ]; then
    echo "Failed to stop the process."
  else
    echo "Process stopped successfully."
  fi
else
  echo "No console running."
fi

你可能感兴趣的:(Linux,linux,rocketmq,运维)