04_虚拟机中间件部署_RocketMQ 5.1.4 部署、docker 安装 dashboard 可视化、JDK 21 安装

04_虚拟机中间件部署_RocketMQ 5.1.4 部署、docker 安装 dashboard 可视化、JDK 21 安装

RocketMQ 5.1.4

RocketMQ 5.1.4 和 JDK 21

作用:做消息的分发、削峰填谷、异步

安装 JDK 21

因为 rockermq 是依赖于java环境的,所以虚拟机也需要有java环境,现在安装个 jdk 21.

下载解压

得到下载地址后,用wget命令拉取即可,这里下载的是 linux 版本 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz 解压 tar -zxvf jdk-21_linux-x64_bin.tar.gz 
在这里插入图片描述
在这里插入图片描述

unzip 和 tar -zxvf 的区别

unzip 用来解压 zip 文件,tar -zxvf 用来解压 tar.gz 文件。

在这里插入图片描述

配置环境变量

.bash_profile 是 Bash 登录 shell 的初始化配置文件,用于设置 用户级环境变量、PATH、别名、函数,在用户登录 Linux 系统时自动执行。

Bash :Bourne Again Shell,是 Linux/Unix 系统的默认命令行解释器(Shell)

我先全局查找下 .bash_profile 文件在哪里 sudo find / -name ".bash_profile" 2>/dev/null 
在这里插入图片描述
我当前的 /home/ljh 这个目录是没有这个.bash_profile配置文件的,可以自己创建一个,用于我当前登录用户 ljh 可以使用。 .bash_profile 是 Bash 登录 Shell 的初始化配置文件,用于设置用户级环境变量和启动配置 在 .bash_profile 配置文件里面添加环境变量 export JAVA_HOME=/home/ljh/nfturbo/middleware/java/jdk-21.0.10 export PATH=$JAVA_HOME/bin:$PATH 执行这个配置文件 source .bash_profile 

如图可以看到jdk的环境变量生效了,可以在任意位置查看版本号了。

在这里插入图片描述
在这里插入图片描述

虚拟机 安装 RocketMQ 5.1.4

重启命令

虚拟机重启之后,目前broker 和 nameserver 还不会自动启动,手动命令启动

在根目录下执行这个命令: 位置: cd /home/ljh/nfturbo/middleware/rocketmq/rocketmq-all-5.1.4-bin-release 启动 name server nohup sh bin/mqnamesrv -n "192.168.209.129:9876" & 启动 broker nohup ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true & 
在这里插入图片描述

然后查看是否启动成功
ps -ef | grep broker
ps -ef | grep mqnamesrv

对比下就可以看到启动成功了

在这里插入图片描述

命令获取

官网下载地址

wget https://dist.apache.org/repos/dist/release/rocketmq/5.1.4/rocketmq-all-5.1.4-bin-release.zip 下载后用unzip解压就行了 

启动

启动name server
在根目录下执行这个命令: 位置:/home/ljh/nfturbo/middleware/rocketmq/rocketmq-all-5.1.4-bin-release nohup sh bin/mqnamesrv -n "192.168.209.129:9876" & 在这个启动命令在后台执行,我们就不用一直等。 nohup 是 让进程不被挂断 & 是 让进程在后台运行 
在这里插入图片描述
在这里插入图片描述
移除掉偏向锁的参数
到 /home/ljh/nfturbo/middleware/rocketmq/rocketmq-all-5.1.4-bin-release/bin 位置下的 runbroker.sh 配置文件里面, 移除掉 UseBiasedLocking 这个偏向锁的参数。 因为 偏向锁被废弃了,所以需要移除这个VM参数 vim 进去后 直接用 ? + 关键词 查找,然后回车即可。 
在这里插入图片描述
启动Broker
修改conf/broker.conf,加入:brokerIP1=你的ip地址 brokerIP1=192.168.209.129 直接在 RocketMQ 根目录启动即可 ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true 或者后台启动,然后回车即可【我用这个,不然还得重新开另一个连接】 nohup ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true & nohup → 关闭终端也不会挂掉 & → 后台运行,立即返回 shell 
在这里插入图片描述
在这里插入图片描述
查看是否启动成功
ps aux | grep broker ps aux | grep mqnamesrv 或者 ps -ef | grep broker ps -ef | grep mqnamesrv ps 是 Linux/Unix 下用来查看当前系统运行进程的命令 ps aux —— 显示系统中所有进程(BSD 风格) ps -ef —— 显示系统中所有进程(Unix 风格) a:显示所有用户的进程 u:显示用户信息 x:显示没有控制终端的进程(比如后台进程) grep 用来在文本中搜索匹配的字符串 
在这里插入图片描述

mqnamesrv 和 broker 都有进程,表示都启动成功了

在这里插入图片描述

调整内存大小

如果内存不够,修改 bin/runserver.sh 和 runbroker.sh,把内存调小一点。 我这里自己测试用的,也不用太多占内存 
在这里插入图片描述
在这里插入图片描述

消息和日志存放位置

配置文件没改的话,日志和消息数据库位置

在这里插入图片描述


在这里插入图片描述
查看日志是否启动成功
1、直接查关键字
grep "boot success" broker.log grep "boot success" namesrv.log 
在这里插入图片描述
2、查看 NameServer 日志 namesrv.log
cd /home/ljh/logs/rocketmqlogs tail -f namesrv.log 或者 tail -n 100 /home/ljh/logs/rocketmqlogs/namesrv.log 

日志显示成功启动

在这里插入图片描述


在这里插入图片描述
3、查看 broker 日志 broker.log
cd /home/ljh/logs/rocketmqlogs tail -f broker.log 或者 tail -n 100 /home/ljh/logs/rocketmqlogs/broker.log 

日志显示成功启动

在这里插入图片描述
4:jps -l 查看当前机器上运行的 Java 程序进程
列出所有 Java 进程,并显示启动的主类或 jar 包路径 jps -l 

可以看到 broker 和 nameserver都启动成功了

在这里插入图片描述

docker 安装 dashboard

为什么rockermq安装在宿主机,而dashboard 安装在docker?

因为 RocketMQ 是核心服务(高性能组件),而 Dashboard 只是一个管理工具,放容器里更方便、更安全、更解耦。

Dashboard 是运行在 Docker 容器里的 JVM,不在宿主机 JVM 进程列表中。

命令

Docker 会从 Docker Hub 下载镜像层(layers) 下载完成后,这个镜像 不是放在当前目录,而是存储在 Docker 的 默认存储目录,由 Docker 管理。 镜像默认存储在:/var/lib/docker docker pull apacherocketmq/rocketmq-dashboard:latest 启动: docker run -d \ --name rocketmq-dashboard \ --restart unless-stopped \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876" \ -p 8080:8080 \ -t apacherocketmq/rocketmq-dashboard:latest 解释: -d 关掉终端,容器还会继续运行 --restart unless-stopped \ 容器自动重启策略 ,除非手动停止,否则会自动重启 -Drocketmq.namesrv.addr=192.168.209.129:9876 Dashboard 去连接 RocketMQ NameServer 总结: 从镜像创建一个容器,并在后台运行 RocketMQ Dashboard Dashboard 是运行在 Docker 容器里的 Java 程序 ------------------------------------------------ 后面报错,重新安装了: 1、先拉取镜像 docker pull styletang/rocketmq-console-ng:latest 2、重新创建容器 docker run -d \ --name rocketmq-dashboard \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ -p 8080:8080 \ -t styletang/rocketmq-console-ng 
在这里插入图片描述

启动失败

浏览器无法访问,开始排除问题

1、查看进程
1-1:ps -ef | grep dashboard
在这里插入图片描述
在这里插入图片描述
1-2:docker ps
在这里插入图片描述
1-3:直接看容器进程 docker top rocketmq-dashboard
在这里插入图片描述
2、查看日志
2-1:容器日志路径
安装在docker 里面的服务的具体位置 cd /var/lib/docker/containers 
在这里插入图片描述

问题:
为什么 docker logs -f rocketmq-dashboard 这个命令看日志有报错,
看 ad4e0f8bbf72f76f85bee782de60260d12f10bf3d33ca6b7de62aac1097f9fd8-json.log ·······这个日志没有报错,不都是 dashboard的日志吗?

回答:

两个日志是同一来源,但看到的内容不一定完全一致,因为: docker logs 是 Docker 解析后的流式输出 *-json.log 是 Docker 原始底层日志文件 就是这个日志也有报错,只不过是 json 格式,我没看出来而已 
在这里插入图片描述
2-1:通过 docker 容器名字查看日志 docker logs -f rocketmq-dashboard
docker logs 是 Docker 客户端提供的子命令,用来查看容器标准输出日志 docker logs -f rocketmq-dashboard 执行这个查询日志,Docker 会: 1、找到容器 rocketmq-dashboard 2、找到这个容器的日志驱动(默认 json-file) 3、读取:/var/lib/docker/containers/<容器ID>/<容器ID>-json.log 4、解析 JSON 5、输出人类可读内容 只查看 100 行 docker logs --tail 100 rocketmq-dashboard 
在这里插入图片描述

可以看到报错信息了

RocketMQ 内部调用链是:Dashboard → NameServer → Broker Dashboard → NameServer (查询 Broker 地址) Dashboard → Broker (直接通信) 1️⃣ Dashboard 先找 NameServer 2️⃣ NameServer 返回 Broker 地址 3️⃣ Dashboard 再自己去找 Broker,而不是nameserver去找broker 
这行异常是在 获取 Broker 集群信息时发生的: 说明 NameServer 已经返回了 Broker 信息, 但 Dashboard 去连接 Broker 时失败 .RemotingConnectException: connect to null failed 和 validateObject failed, clusterInfo = null (Broker 集群信息获取失败,说明 Broker 根本没有连上) 可以看出在控制台上无法访问broker 这里可以看出 nameserver 已经链接上了 ClientConfig{namesrvAddr='192.168.209.129:9876' 
在这里插入图片描述

可能是启动控制台的时候ip地址不对。如果按照官方文档,你用的是

docker run -d \ --name rocketmq-dashboard \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" \ -p 8080:8080 \ -t apacherocketmq/rocketmq-dashboard:latest ---------------------------------------- 这个命令只适用于一种情况: NameServer 和 Dashboard 在同一个容器, 或者 Dashboard 直接跑在宿主机(不是 Docker) 但是现在我是: NameServer:宿主机虚拟机 Dashboard:Docker 容器 问题: 可是我不是已经能连接到nameserver了吗,然后nameserver再去连接broker为什么会失败? 回答: NameServer 只负责“告诉你 Broker 在哪”,不做代理、不转发 RocketMQ 内部调用链是:Dashboard → NameServer → Broker Dashboard → NameServer (查询 Broker 地址) Dashboard → Broker (直接通信) 1️⃣ Dashboard 先找 NameServer 2️⃣ NameServer 返回 Broker 地址 3️⃣ Dashboard 再自己去找 Broker,而不是nameserver去找broker 

那么就会有问题。因为,docker容器 是一个容器,doccker容器 与 宿主机 可以看成是两个独立的服务器,在 docker 容器内访问 127.0.0.1或localhost都是访问的这个docker容器本身,如果要访问宿主机的必须使用宿主机IP

docker run -d \ --name rocketmq-dashboard \ --link rmqserver:namesrv \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ -p 8080:8080 \ -t styletang/rocketmq-console-ng ----------------- 解释: Dcom.rocketmq.sendMessageWithVIPChannel=false 关闭 VIP 通道【一个 10909 的端口】 --link rmqserver:namesrv \ 这个后面被我删掉了 容器 rmqserver 可以用 hostname namesrv 访问,不过这里没用到,因为写了 宿主机IP。 styletang/rocketmq-console-ng 这个是更新的版本 


重新安装成功

 停掉并删除旧容器 docker rm -f rocketmq-dashboard 先拉取镜像 docker pull styletang/rocketmq-console-ng:latest 重新创建容器 docker run -d \ --name rocketmq-dashboard \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.209.129:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ -p 8080:8080 \ -t styletang/rocketmq-console-ng 
在这里插入图片描述

拉取成功

在这里插入图片描述

创建容器成功

在这里插入图片描述

查看日志
docker logs -f rocketmq-dashboard

好像没毛病

在这里插入图片描述
启动已有容器
启动已有容器 docker start rocketmq-dashboard 
设置自动重启
docker update --restart unless-stopped rocketmq-dashboard 

访问成功

http://192.168.209.129:8080/#/

在这里插入图片描述

代码简单集成

部署完成之后要集成到项目中,这个是我自己记录的,读者可以不必理会。

pom

在这里插入图片描述

配置文件依赖关系

spring.config.import 是干啥的?

回答:
在 Spring Boot 2.4+,官方推荐 配置文件模块化,可以把不同的配置拆成多个文件,然后在主配置里导入;

作用:
告诉 Spring Boot 把这些文件的配置都加载到环境里;
顺序决定覆盖规则(后面文件可以覆盖前面文件的属性);
可以把配置拆模块化,便于管理;
所以这里的 stream.yml 被导入到整个 Spring Environment 里了。

在这里插入图片描述
在这里插入图片描述

Spring Boot 3 自动配置注册文件 理解

在 Spring Boot 2.x 时代,这个功能由 spring.factories 文件提供

在 Spring Boot 3.x,官方改为 AutoConfiguration.imports 文件,

它被 AutoConfigurationImportSelector 和 ImportCandidates 类加载。

Spring Boot 会主动加载这个配置类,不依赖包扫描范围

Read more

Microsoft Visual C++ 14.0完整安装包与配置指南

本文还有配套的精品资源,点击获取 简介:Microsoft Visual C++ 14.0是由微软提供的Windows平台C++开发工具,包含编译器、标准库及多种开发组件,支持C++应用程序的构建与运行。该压缩包包含完整的安装文件及运行库,适用于开发环境搭建以及Python等依赖C++编译的库安装。通过下载、解压、安装和环境变量配置,开发者可以在Windows系统中顺利运行C++项目及使用如numpy、pandas等常用Python库。附带的使用说明文档提供了详细的安装指引和常见问题解决方案。 1. Microsoft Visual C++ 14.0简介 Microsoft Visual C++ 14.0 是微软推出的重要 C++ 开发工具集,内嵌于 Visual Studio 2015 中,标志着 Windows 平台原生开发的重大升级。它不仅全面支持 C++11 标准,并引入了对

By Ne0inhk
C++ 波澜壮阔 40 年:从 C with Classes 到现代 C++ 的进化史诗

C++ 波澜壮阔 40 年:从 C with Classes 到现代 C++ 的进化史诗

🔥@晨非辰Tong: 个人主页 👀专栏:《数据结构与算法入门指南》、《C++学习之旅》 💪学习阶段:C语言、数据结构与算法初学者 ⏳“人理解迭代,神理解递归。” 文章目录 * 引言 * 一、波澜壮阔的C++“发家”历史 * 1. 1 C with Classes (1979-1983)-起源 * 1.2 早期发展:C++的"++"从何来(1983-1989) * 1.3 标准化与成熟(1990-1998) * 1.4 现代化浪潮(2011-至今) * 二、推荐C++学习参考网站、好用书籍 * 三、梦开始的地方:C++的第一个程序 * 3.

By Ne0inhk
C++之《程序员自我修养》读书总结(5)

C++之《程序员自我修养》读书总结(5)

《程序员自我修养》读书总结(五) Author: Once Day Date: 2026年2月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 书籍阅读_Once-Day的博客-ZEEKLOG博客 参考文章:《程序员的自我修养》读书笔记 | Zachary’s blog《程序员的自我修养》阅读笔记 - T0fV404 - 博客园读书笔记:《程序员的自我修养》 - 楷哥 - 博客园 文章目录 * 《程序员自我修养》读书总结(五) * 5. Windows PE/COFF 格式 * 5.1 发展历史 * 5.2 mingw-w64 工具链 * 5.

By Ne0inhk