Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)脚步

1、Docker安装RocketMq

2、Docker安装Nginx

3、Docker安装MySql

4、Docker安装Minio

5、Docker安装jenkins

 6、Docker安装Redis

1、Docker安装RocketMq

#!/bin/bash# 定义变量
NAMESRV_CONTAINER="rocketmq-namesrv"
BROKER_CONTAINER="rocketmq-broker"
DASHBOARD_CONTAINER="rocketmq-dashboard"
IMAGE_ROCKETMQ="m.daocloud.io/docker.io/apache/rocketmq:5.2.0"  # 修改为5.2.0版本
IMAGE_DASHBOARD="m.daocloud.io/docker.io/apacherocketmq/rocketmq-dashboard:latest"
NAMESRV_PORT=9876
BROKER_PORT=10911
DASHBOARD_PORT=8111# 获取宿主机IP(最佳实践方式)
HOST_IP=$(ip route get 1 | awk '{print $7;exit}')# 宿主机目录设置
HOST_DATA_DIR="/work/docker/rocketmq"
HOST_CONF_DIR="$HOST_DATA_DIR/conf"
HOST_STORE_DIR="$HOST_DATA_DIR/store"
HOST_LOGS_DIR="$HOST_DATA_DIR/logs"# 清理环境
echo "正在彻底清理旧环境..."
docker rm -f "$NAMESRV_CONTAINER" "$BROKER_CONTAINER" "$DASHBOARD_CONTAINER" 2>/dev/null
docker network rm rocketmq-net 2>/dev/null
rm -rf "$HOST_DATA_DIR"# 创建目录结构
echo "初始化目录..."
mkdir -p "$HOST_CONF_DIR" "$HOST_STORE_DIR"/{commitlog,consumequeue,index} "$HOST_LOGS_DIR"/{namesrv,broker}
chmod -R 777 "$HOST_DATA_DIR"  # 临时放宽权限用于调试# 生成Broker配置文件(适配5.2.0版本)
cat > "$HOST_CONF_DIR/broker.conf" <<EOF
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=${HOST_IP}:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/store/commitlog
autoCreateTopicEnable=true
listenPort=10911
enableControllerMode=false  # 5.x新增参数
EOF# 生成ACL配置文件(5.x版本需要)
cat > "$HOST_CONF_DIR/plain_acl.yml" <<EOF
accounts:- accessKey: rocketmqsecretKey: 12345678whiteRemoteAddress:admin: true
EOF# 创建专用网络
docker network create rocketmq-net# 启动NameServer(5.2.0版本参数)
echo "启动NameServer..."
docker run -d \--name "$NAMESRV_CONTAINER" \--network rocketmq-net \--hostname namesrv \--restart=always \-p "$NAMESRV_PORT:9876" \-v "$HOST_LOGS_DIR/namesrv:/home/rocketmq/logs" \-e "JAVA_OPT_EXT=-Xms512m -Xmx512m -Drocketmq.namesrv.remoting.debug=true" \"$IMAGE_ROCKETMQ" \sh mqnamesrv# 等待初始化(延长等待时间)
echo "等待NameServer初始化..."
sleep 20# 启动Broker(5.2.0版本启动命令)
echo "启动Broker..."
docker run -d \--name "$BROKER_CONTAINER" \--network rocketmq-net \--privileged \--restart=always \-p 10909:10909 \-p 10911:10911 \-p 10912:10912 \-v "$HOST_CONF_DIR/broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf" \-v "$HOST_CONF_DIR/plain_acl.yml:/home/rocketmq/rocketmq-5.2.0/conf/plain_acl.yml" \-v "$HOST_STORE_DIR:/home/rocketmq/store" \-v "$HOST_LOGS_DIR/broker:/home/rocketmq/logs" \-e "JAVA_OPT_EXT=-Xms2g -Xmx2g -Xmn512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4" \"$IMAGE_ROCKETMQ" \sh -c "mqbroker -n $HOST_IP:9876 -c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf 2>&1 | tee /home/rocketmq/logs/broker.log"# 启动Dashboard(最新版)
echo "启动Dashboard..."
docker run -d \--name "$DASHBOARD_CONTAINER" \--network rocketmq-net \--restart=always \-p "$DASHBOARD_PORT:8080" \-e "JAVA_OPTS=-Drocketmq.namesrv.addr=${HOST_IP}:9876 -Drocketmq.config.aclEnabled=true" \"$IMAGE_DASHBOARD"# 验证部署
echo -e "\n====== 部署验证 ======"
echo "1. 检查Broker日志(等待30秒...)"
sleep 30
docker logs "$BROKER_CONTAINER" | grep -A 10 "boot success" || {echo "Broker启动失败,关键错误:"docker logs "$BROKER_CONTAINER" | grep -E "ERROR|error|fail" | tail -20exit 1
}echo "2. 集群状态检查:"
docker exec "$BROKER_CONTAINER" sh mqadmin clusterList -n "$HOST_IP:9876" || {echo "集群状态检查失败"exit 1
}echo -e "\n====== 访问信息 ======"
echo "Dashboard: http://${HOST_IP}:${DASHBOARD_PORT} (admin/123456)"
echo "NameServer: ${HOST_IP}:${NAMESRV_PORT}"
echo "数据目录: $HOST_DATA_DIR"
echo "Broker日志: docker logs -f $BROKER_CONTAINER"

2、Docker安装Nginx

#!/bin/bash# 定义变量
CONTAINER_NAME="nginx"
IMAGE_NAME="m.daocloud.io/docker.io/nginx"
HTTP_PORT=80
HTTPS_PORT=443
TIMEZONE="Asia/Shanghai"# 宿主机目录映射路径
HOST_NGINX_CONF="/work/docker/nginx/nginx.conf"       # Nginx 主配置文件
HOST_CONF_D_DIR="/work/docker/nginx/conf.d"          # Nginx 额外配置文件目录
HOST_LOGS_DIR="/work/docker/nginx/logs"              # 日志目录
HOST_CERT_DIR="/work/docker/nginx/cert"              # 证书目录
HOST_HTML_DIR="/work/projects/html"              # 静态资源目录# 创建宿主机目录(如果不存在)
echo "检查并创建宿主机目录..."
mkdir -p "$(dirname "$HOST_NGINX_CONF")"
mkdir -p "$HOST_CONF_D_DIR"
mkdir -p "$HOST_LOGS_DIR"
mkdir -p "$HOST_CERT_DIR"
mkdir -p "$HOST_HTML_DIR"# 如果主配置文件不存在,则生成默认配置文件
if [ ! -f "$HOST_NGINX_CONF" ]; thenecho "生成默认 Nginx 配置文件到 $HOST_NGINX_CONF ..."cat <<EOF > "$HOST_NGINX_CONF"
user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '\$remote_addr - \$remote_user [\$time_local] "\$request" ''\$status \$body_bytes_sent "\$http_referer" ''"\$http_user_agent" "\$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;keepalive_timeout  65;include /etc/nginx/conf.d/*.conf;
}
EOF
fi# 检查容器是否已经存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,尝试删除旧容器..."docker rm -f "$CONTAINER_NAME"
fi# 启动 Nginx 容器
echo "正在启动 Nginx 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p "$HTTP_PORT:80" \-p "$HTTPS_PORT:443" \-p 8090:8090 \-p 8091:8091 \-e "TZ=$TIMEZONE" \-v "$HOST_NGINX_CONF:/etc/nginx/nginx.conf" \-v "$HOST_CONF_D_DIR:/etc/nginx/conf.d" \-v "$HOST_LOGS_DIR:/var/log/nginx" \-v "$HOST_CERT_DIR:/etc/nginx/cert" \-v "$HOST_HTML_DIR:/usr/share/nginx/html" \"$IMAGE_NAME"# 检查容器是否启动成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "Nginx 容器已成功启动!"echo "主配置文件: $HOST_NGINX_CONF"echo "额外配置目录: $HOST_CONF_D_DIR"echo "日志目录: $HOST_LOGS_DIR"echo "证书目录: $HOST_CERT_DIR"echo "静态资源目录: $HOST_HTML_DIR"
elseecho "Nginx 容器启动失败,请检查日志。"
fi

3、Docker安装MySql

#!/bin/bash# 定义变量
CONTAINER_NAME="mysql"
IMAGE_NAME="m.daocloud.io/docker.io/mysql"
HOST_PORT=3306
CONTAINER_PORT=3306
MYSQL_ROOT_PASSWORD="chenmo@123"# 数据和配置文件的映射路径
HOST_DATA_DIR="/work/docker/mysql"       # 宿主机的数据目录
HOST_CONFIG_FILE="/work/docker/conf/my.cnf" # 宿主机的配置文件路径# 创建宿主机目录(如果不存在)
echo "检查并创建宿主机目录..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$(dirname "$HOST_CONFIG_FILE")"# 检查配置文件是否存在,如果不存在则生成默认配置文件
if [ ! -f "$HOST_CONFIG_FILE" ]; thenecho "生成默认 MySQL 配置文件到 $HOST_CONFIG_FILE ..."cat <<EOF > "$HOST_CONFIG_FILE"
[mysqld]
# MySQL 服务配置
user=mysql
port=$CONTAINER_PORT
bind-address=0.0.0.0
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-storage-engine=INNODB
max_connections=200
innodb_buffer_pool_size=512M# 日志配置
log-error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2# 数据持久化
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock[client]
port=$CONTAINER_PORT
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4
EOF
fi# 检查容器是否已经存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,尝试删除旧容器..."docker rm -f "$CONTAINER_NAME"
fi# 启动 MySQL 容器
echo "正在启动 MySQL 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p "$HOST_PORT:$CONTAINER_PORT" \-v "$HOST_DATA_DIR:/var/lib/mysql" \-v "$HOST_CONFIG_FILE:/etc/mysql/my.cnf" \-e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" \"$IMAGE_NAME"# 检查容器是否启动成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "MySQL 容器已成功启动!"echo "数据目录: $HOST_DATA_DIR"echo "配置文件: $HOST_CONFIG_FILE"echo "MySQL 根用户密码: $MYSQL_ROOT_PASSWORD"
elseecho "MySQL 容器启动失败,请检查日志。"
fi

4、Docker安装Minio

#!/bin/bash# 定义变量
CONTAINER_NAME="minio"
IMAGE_NAME="m.daocloud.io/docker.io/minio/minio"
API_PORT=9000
CONSOLE_PORT=9001
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="chenmo@123"# 数据和配置的映射路径
HOST_DATA_DIR="/work/docker/minio/data"       # 宿主机的数据目录
HOST_CONFIG_DIR="/work/docker/minio/config"   # 宿主机的配置目录# 创建宿主机目录(如果不存在)
echo "检查并创建宿主机目录..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$HOST_CONFIG_DIR"# 检查容器是否已经存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,尝试删除旧容器..."docker rm -f "$CONTAINER_NAME"
fi# 启动 MinIO 容器
echo "正在启动 MinIO 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p $API_PORT:9000 \-p $CONSOLE_PORT:9001 \-e "MINIO_ROOT_USER=$MINIO_ROOT_USER" \-e "MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD" \-v "$HOST_DATA_DIR:/data" \-v "$HOST_CONFIG_DIR:/root/.minio" \"$IMAGE_NAME" server /data \--console-address ":$CONSOLE_PORT"# 检查容器是否启动成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "=============================================="echo "MinIO 容器已成功启动!"echo "API 地址: http://服务器IP:$API_PORT"echo "控制台地址: http://服务器IP:$CONSOLE_PORT"echo "访问密钥: $MINIO_ROOT_USER"echo "秘密密钥: $MINIO_ROOT_PASSWORD"echo "数据目录: $HOST_DATA_DIR"echo "配置目录: $HOST_CONFIG_DIR"echo "=============================================="
elseecho "MinIO 容器启动失败,请检查日志。"docker logs $CONTAINER_NAME
fi

5、Docker安装jenkins

#!/bin/bash# 定义变量
CONTAINER_NAME="jenkins"
IMAGE_NAME="m.daocloud.io/docker.io/jenkins/jenkins:lts-jdk17"
HTTP_PORT=8080
AGENT_PORT=50000
JENKINS_ADMIN_USER="admin"
JENKINS_ADMIN_PASSWORD="chenmo@123"# 数据和配置的映射路径
HOST_DATA_DIR="/work/docker/jenkins/data"       # 宿主机的数据目录
HOST_CONFIG_DIR="/work/docker/jenkins/config"   # 宿主机的配置目录# 创建宿主机目录(如果不存在)
echo "检查并创建宿主机目录..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$HOST_CONFIG_DIR"# 设置目录权限(Jenkins在容器内使用1000用户运行)
chown -R 1000:1000 "$HOST_DATA_DIR"
chown -R 1000:1000 "$HOST_CONFIG_DIR"# 检查容器是否已经存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,尝试删除旧容器..."docker rm -f "$CONTAINER_NAME"
fi# 启动 Jenkins 容器
echo "正在启动 Jenkins 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \--user 1000 \-p $HTTP_PORT:8080 \-p $AGENT_PORT:50000 \-v "$HOST_DATA_DIR:/var/jenkins_home" \-v "$HOST_CONFIG_DIR:/var/jenkins_config" \-v /var/run/docker.sock:/var/run/docker.sock \"$IMAGE_NAME"# 检查容器是否启动成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "=============================================="echo "Jenkins 容器已成功启动!"echo "Web 访问地址: http://服务器IP:$HTTP_PORT"echo "初始管理员用户名: $JENKINS_ADMIN_USER"echo "初始管理员密码: 请查看以下初始密码或使用您设置的密码"echo "数据目录: $HOST_DATA_DIR"echo "配置目录: $HOST_CONFIG_DIR"echo "=============================================="echo "首次启动可能需要一些时间初始化,请稍后访问..."echo "获取初始管理员密码命令: docker exec $CONTAINER_NAME cat /var/jenkins_home/secrets/initialAdminPassword"
elseecho "Jenkins 容器启动失败,请检查日志。"docker logs $CONTAINER_NAME
fi

 6、Docker安装Redis

#!/bin/bash# 定义变量
CONTAINER_NAME="redis"
IMAGE_NAME="m.daocloud.io/docker.io/redis"
HOST_PORT=6379
CONTAINER_PORT=6379
REDIS_PASSWORD="chenmo@123"# 数据和配置文件的映射路径
HOST_DATA_DIR="/work/docker/redis"       # 宿主机的数据目录
HOST_CONFIG_FILE="/work/docker/conf/redis.conf" # 宿主机的配置文件路径# 创建宿主机目录(如果不存在)
echo "检查并创建宿主机目录..."
mkdir -p "$HOST_DATA_DIR"
mkdir -p "$(dirname "$HOST_CONFIG_FILE")"# 检查配置文件是否存在,如果不存在则生成默认配置文件
if [ ! -f "$HOST_CONFIG_FILE" ]; thenecho "生成默认 Redis 配置文件到 $HOST_CONFIG_FILE ..."cat <<EOF > "$HOST_CONFIG_FILE"
# Redis 默认配置文件
bind 0.0.0.0
port $CONTAINER_PORT
requirepass $REDIS_PASSWORD
dir /data
appendonly yes
EOF
fi# 检查容器是否已经存在
if docker ps -a | grep -q "$CONTAINER_NAME"; thenecho "容器 $CONTAINER_NAME 已存在,尝试删除旧容器..."docker rm -f "$CONTAINER_NAME"
fi# 启动 Redis 容器
echo "正在启动 Redis 容器..."
docker run -d \--name "$CONTAINER_NAME" \--restart=always \-p "$HOST_PORT:$CONTAINER_PORT" \-v "$HOST_DATA_DIR:/data" \-v "$HOST_CONFIG_FILE:/usr/local/etc/redis/redis.conf" \"$IMAGE_NAME" \redis-server /usr/local/etc/redis/redis.conf# 检查容器是否启动成功
if docker ps | grep -q "$CONTAINER_NAME"; thenecho "Redis 容器已成功启动!"echo "数据目录: $HOST_DATA_DIR"echo "配置文件: $HOST_CONFIG_FILE"
elseecho "Redis 容器启动失败,请检查日志。"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88896.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF学习笔记(27)科学计算器

科学计算器1. 前端界面2. 功能代码3. 效果展示1. 前端界面 <Window x:Class"Cal.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http:/…

【Linux系列】unzip file 命令

博客目录掌握 unzip -o 命令&#xff1a;高效解压并覆盖文件的完整指南一、unzip 命令基础二、-o 选项的核心作用三、典型应用场景四、与其他选项的组合使用五、注意事项与风险防范六、替代方案与高级技巧掌握 unzip -o 命令&#xff1a;高效解压并覆盖文件的完整指南 在日常的…

1965–2022年中国大陆高分辨率分部门用水数据集,包含:灌溉用水、工业制造用水、生活用水和火电冷却

1965–2022年中国大陆高分辨率部门用水数据集 高质量用水数据集对推进变化环境下的水资源研究至关重要。然而&#xff0c;现有中国用水数据通常按行政区划或流域汇总&#xff0c;时空分辨率不足&#xff0c;难以支撑人类用水模式及时空变化特征的精细化分析。为此&#xff0c;…

git中的指令解释

在 Git 的 diff 输出中&#xff0c;---、 和 ... 块的含义如下&#xff1a; 1. --- a/1.py 和 b/1.py --- a/1.py&#xff1a;表示旧版本的文件路径&#xff08;通常是工作目录或上一次提交的版本&#xff09;。 b/1.py&#xff1a;表示新版本的文件路径&#xff08;通常是暂存…

STM32实现四自由度机械臂(SG90舵机)多功能控制(软件篇freertos)

书接上回的硬件篇STM32控制四自由度机械臂&#xff08;SG90舵机&#xff09;&#xff08;硬件篇&#xff09;&#xff08;简单易复刻&#xff09;-CSDN博客 此时硬件平台已经搭建完毕&#xff0c;软件总共设计了三种模式&#xff0c;分别为 模式1&#xff1a;摇杆&蓝牙模…

docker常用命令集(2)

接前一篇文章&#xff1a;docker常用命令集&#xff08;1&#xff09; 本文内容参考&#xff1a; Docker build 命令 | 菜鸟教程 docker基础(二)之docker build-CSDN博客 Docker push 命令 | 菜鸟教程 Docker pull 命令 | 菜鸟教程 特此致谢&#xff01; 3. docker build …

舒尔特方格训练小游戏流量主微信小程序开源

功能特点 游戏核心功能&#xff1a; 随机生成55舒尔特方格 按顺序点击数字1-25 实时计时和尝试次数统计 错误点击反馈&#xff08;视觉和触觉&#xff09; 数据统计&#xff1a; 记录每次完成时间 保存历史最佳成绩 保存最近5次尝试记录 统计尝试次数&#xff08;错误点击&…

在Spring Boot 开发中 Bean 的声明和依赖注入最佳的组合方式是什么?

在Spring Boot 开发中&#xff0c;社区和 Spring 官方已经形成了一套非常明确的最佳实践。这个黄金组合就是&#xff1a; Bean 声明&#xff1a;使用构造型注解&#xff08;Stereotype Annotations&#xff09;&#xff0c;如 Service, Repository, Component 等。依赖注入&…

Oxygen XML Editor 26.0编辑器

Oxygen XML Editor 26.0编辑器 欢迎使用Oxygen XML Editor 26.0编辑器准备工作安装javajdk安装jdk验证Oxygen XML Editor 26.0安装欢迎使用Oxygen XML Editor 26.0编辑器 准备工作安装java Java官网下载地址:https://www.oracle.com/java/technologies/ Oxygen XML Editor 2…

AWS Lambda Container 方式部署 Flask 应用并通过 API Gateway 提供访问

前言 一年前写过一篇 Lambda 运行 Flask 应用的博文: https://lpwmm.blog.csdn.net/article/details/139756140 当时使用的是 ZIP 包方式部署应用代码, 对于简单的 API 开发用起来还是可以的, 但是如果需要集成到 CI/CD pipeline 里面就有点不太优雅. 本文将介绍使用容器方式…

React虚拟DOM的进化之路

引言 在Web前端开发中&#xff0c;用户交互的流畅性和页面性能一直是核心挑战。早期&#xff0c;开发者直接操作真实DOM&#xff08;Document Object Model&#xff09;时&#xff0c;频繁的重排&#xff08;reflow&#xff09;和重绘&#xff08;repaint&#xff09;导致性能…

(7)机器学习小白入门 YOLOv:机器学习模型训练详解

— (1)机器学习小白入门YOLOv &#xff1a;从概念到实践 (2)机器学习小白入门 YOLOv&#xff1a;从模块优化到工程部署 (3)机器学习小白入门 YOLOv&#xff1a; 解锁图片分类新技能 (4)机器学习小白入门YOLOv &#xff1a;图片标注实操手册 (5)机器学习小白入门 YOLOv&#xff…

初识MySQL(三)之主从配置与读写分离实战

主重复制 主重复制原理master开启二进制日志记录slave开启IO进程&#xff0c;从master中读取二进制日志并写入slave的中继日志slave开启SQL进程&#xff0c;从中继日志中读取二进制日志并进行重放最终&#xff0c;达到slave与master中数据一致的状态&#xff0c;我们称作为主从…

RabbitMQ面试精讲 Day 2:RabbitMQ工作模型与消息流转

【RabbitMQ面试精讲 Day 2】RabbitMQ工作模型与消息流转 开篇 欢迎来到"RabbitMQ面试精讲"系列的第2天&#xff0c;今天我们将深入探讨RabbitMQ的工作模型与消息流转机制。这是面试中最常被问到的核心知识点之一&#xff0c;90%的RabbitMQ面试都会涉及消息流转流程…

基于SpringBoot3集成Kafka集群

1. build.gradle依赖引入 implementation org.springframework.kafka:spring-kafka:3.2.02. 新增kafka-log.yml文件 在resource/config下面新增kafka-log.yml&#xff0c;配置主题与消费者组 # Kafka消费者群组 kafka:consumer:group:log-data: log-data-grouptopic:log-data: …

wpf Canvas 导出图片

在WPF中将Canvas导出为图片主要涉及以下关键步骤和注意事项: ‌核心实现方法‌使用RenderTargetBitmap将Canvas渲染为位图,再通过PngBitmapEncoder保存为PNG文件。需注意临时移除Canvas的布局变换(LayoutTransform)以避免渲染异常‌1。示例代码片段:CanvasExporter.cs pu…

lvs负载均衡实操模拟

目录 一、配置准备 二、NET模式 修改LVS端 开启路由 修改对内网卡 ens160 修改对外网卡 ens224 加载网卡配置文件 修改web1端 修改网卡信息 重启网络 检测 配置web2 检测 验证配置是否正常 启动nginx服务 验证以上配置 添加lvs规则 验证 三、DR模式 修改…

Spring Boot 是如何简化 IoC 的配置的?

首先Spring Boot 并没有发明新的 IoC 理论&#xff0c;它做的也不是替换掉 Spring IoC 容器。相反&#xff0c;Spring Boot 是 Spring IoC 思想的实践者和简化者。它通过**“约定优于配置”&#xff08;Convention over Configuration&#xff09;**的理念&#xff0c;将原本繁…

Go语言中的组合式接口设计模式

文章目录Go语言中的组合式接口设计模式背景和需求组合式接口设计Go语言中的组合式接口设计模式 背景和需求 在微服务架构和复杂业务系统中&#xff0c;我们经常需要调用多个外部服务或内部模块。传统的做法是将所有方法都放在一个大接口中&#xff0c;但这种设计会导致接口臃…

React - createPortal

什么是createPortal&#xff1f;注意这是一个API&#xff0c;不是组件&#xff0c;他的作用是&#xff1a;将一个组件渲染到DOM的任意位置&#xff0c;跟Vue的Teleport组件类似。用法 import { createPortal } from react-dom;const App () > {return createPortal(<div…