SpringCloud+Netty集群实战千万级 IM系统【一】

3-1 开发环境搭建–本章概述

一、本章概述

1. 环境配置和软件相关内容总结
1)开发环境配置
  • JDK选择:将讲解三种JDK版本的区别与选择,包括OpenJDK、Zulu JDK和Oracle JDK
  • Maven配置:作为最终开发环境的核心组件,将详细讲解其配置方法
  • 环境搭建:JDK和Maven将共同构成完整的开发环境基础
2)Docker技术
  • 概念讲解:先介绍虚拟化与容器化的核心概念差异
  • 架构原理:深入讲解Docker的技术实现原理和内部架构
  • 安装实践:在理论讲解后,将进行实际的Docker安装操作
3)数据库选型
  • 类型对比:分析不同数据库类型的特性与适用场景
  • 选择标准:讲解数据库选型的考量因素和决策过程
  • 最终选择:确定使用MySQL 8作为项目数据库
4)软件安装实践
  • MySQL安装:使用Docker容器化方式安装MySQL 8
  • Redis安装:在Docker中安装最新版Redis 7
  • 持久化机制:深入讲解Redis的RDB和AOF两种持久化实现原理
5)技术实现细节
  • 容器化部署:所有软件均采用Docker容器化方式运行
  • 版本控制:明确使用MySQL 8和Redis 7等具体版本
  • 原理剖析:不仅讲解安装步骤,还会深入底层实现机制

二、知识小结

知识点 核心内容 考试重点/易混淆点 难度系数
开发环境配置 JDK版本选择(OpenJDK/Zulu/Oracle JDK)、Maven配置 不同JDK版本的区别与适用场景 ⭐⭐
Docker基础 虚拟化与容器化概念、技术架构原理 容器化与传统虚拟化的核心差异 ⭐⭐⭐
数据库选型 数据库类型对比(关系型/非关系型)、MySQL 8选型原因 ACID特性与NoSQL的CAP理论对比 ⭐⭐⭐⭐
Docker化部署 MySQL 8容器化安装与运行 容器数据卷与持久化配置 ⭐⭐⭐
Redis 7安装与持久化 RDB与AOF机制原理 快照与日志持久化的性能权衡 ⭐⭐⭐⭐

3-8 【基础】容器化安装MySQL8数据库

我们采用开发环境容器化、虚拟化开发

1.容器化安装MySQL8数据库

下载MySQL8

docker pull mysql:8.0.27

检查镜像:

1
docker images

运行 运行mysql容器

1
docker run [启动参数] IMAGE [镜像启动的运行命令(一般不写)]

使用如下命令来启动mysql容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -p 4406:3306 --name mysql8-imooc \
-v /Volumes/lee/docker/mysql8.3.0/log:/var/log/mysql \
-v /Volumes/lee/docker/mysql8.3.0/data:/var/lib/mysql \
-v /Volumes/lee/docker/mysql8.3.0/conf:/etc/mysql/conf.d \
-v /Volumes/lee/docker/mysql8.3.0/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.3.0 \--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
mkdir /Volumes/lee/docker/mysql8.3.0/log -p
mkdir /Volumes/lee/docker/mysql8.3.0/data -p
mkdir /Volumes/lee/docker/mysql8.3.0/conf -p
mkdir /Volumes/lee/docker/mysql8.3.0/mysql-files -p
docker start mysql
docker stop mysql
docker restart mysql

安装mysql成功并且启动成功!

2.容器化安装Redis7

1
docker pull redis:7.2.4

预先创建目录和文件,用于提供给redis容器做好目录映射:

1
2
mkdir -p /home/redis6/conf
touch /home/redis6/conf/redis.conf

运行redis:

1
2
3
4
5
docker run -p 5379:6379 --name redis \
-v /Volumes/lee/docker/redis7/data:/data \
-v /Volumes/lee/docker/redis7/conf/redis.conf:/etc/redis/redis.conf \
-d redis:7.2.4 \
redis-server /etc/redis/redis.conf

解释:

  • 用6379做好端口映射,用redis作为服务容器的名字
  • data和conf做好目录映射
  • -d 后台运行
  • 指定配置文件运行redis-server

4-1 微服务网关鉴权–本章概述

一、本章概述

1. 通过Maven构建分层聚合项目
  • 项目结构特点:现代项目多为分层聚合结构,每层功能清晰可控,区别于传统单体应用
  • 构建工具:使用Maven进行项目构建,实现模块化管理和依赖控制
  • 优势说明:分层设计使各层职责分离,便于团队协作和后期维护
2. 微服务架构整体框架搭建
  • 技术栈组合:采用Spring Boot + Spring Cloud + Spring Cloud Alibaba技术体系
  • 版本管理要点:
    • 各组件版本需保持兼容性,不能盲目使用最新版本
    • 版本冲突会导致架构搭建失败
    • 需特别注意三者间的版本依赖关系
3. 使用Nacos作为微服务注册中心
  • 部署方式:通过Docker容器化安装和运行Nacos
  • 核心功能:作为微服务注册中心,实现服务注册与发现
  • 运行机制:所有微服务都需在Nacos中注册,便于统一管理
4. 多环境配置
  • 环境类型:支持开发环境、测试环境、生产环境等不同配置
  • 实现方式:利用Spring Boot的多环境配置特性
  • 配置管理:通过profile机制实现环境间配置切换
5. 搭建微服务网关
  • 网关作用:作为流量入口,所有请求必须经过网关才能访问后端服务
  • 核心功能:实现请求路由分发和统一流量管控
  • 实现方式:手把手搭建网关服务,确保架构完整性
6. 高并发流量防刷控制
  • 必要性:应对高并发流量冲击,防止系统崩溃
  • 技术方案:结合Nginx实现流量控制和防刷机制
  • 防护目标:保障系统在高并发场景下的稳定性
7. 分布式动态参数配置
  • 参数管理:防刷相关参数需实现动态配置,避免硬编码
  • 技术实现:结合分布式配置中心完成参数动态更新
  • 系统联动:与防刷控制模块协同工作,形成完整防护体系

二、知识小结

知识点 核心内容 考试重点/易混淆点 难度系数
Maven分层聚合项目构建 使用Maven构建分层聚合项目,实现模块化清晰控制 分层项目结构与单模块项目的区别 ⭐⭐
微服务框架搭建 Spring Boot + Spring Cloud + Spring Cloud Alibaba版本兼容性配置 版本依赖关系与最新版本不兼容的风险 ⭐⭐⭐
Nacos注册中心 通过Docker容器化部署Nacos,实现微服务注册与发现 Docker安装与Nacos配置的关联性 ⭐⭐
多环境配置 Spring Boot多环境配置(开发/测试/生产) Profile切换与配置优先级 ⭐⭐
微服务网关搭建 流量统一入口控制,实现请求路由分发 网关与普通API服务的功能边界 ⭐⭐⭐
高并发防刷控制 结合Nginx实现流量限制与防刷策略 动态参数配置与静态规则的对比 ⭐⭐⭐⭐
分布式动态配置 结合分布式配置中心实现防刷参数动态化 配置中心与本地配置的同步机制 ⭐⭐⭐

4-2 【基础】构建maven分层聚合项目

一、项目工程结构

1. 项目总工程名称
  • 命名规则: 项目总工程名称为wechat-dev,可自定义命名
  • 分层理念: 项目采用分层聚合架构,类似建筑框架,不同功能有不同结构
2. 分层聚合
1)第一层 - Common
  • 功能定位: 存放通用工具类和组件
  • 依赖关系: 作为二级工程依赖于总工程,类似面向对象的继承关系
  • 特点: 上层引入的环境和架包可被下层依赖使用
2)第二层 - POJO
  • 内容范围: 存放实体类(entity)、DTO、BO、VO等数据结构
  • 依赖关系: 依赖于common层,可使用common中的通用组件
  • 命名说明: POJO是Plain Old Java Object的缩写
3)第三层 - API
  • 功能定位: 存放web相关组件和配置
  • 必要性: 非必须但推荐,可集中管理跨域配置、拦截器等web组件
  • 业务微服务: 包含auth-service(授权)、main-service(核心业务)、file-service(文件处理)三个主要微服务
3. 采用IDEA构建项目
1)项目命名

  • 命名规范: 项目名称为wechat-dev
  • 存储路径: 可自定义项目保存目录
  • 语言选择: 使用Java语言开发
2)JDK版本

  • 版本要求: 使用OpenJDK 17
  • 兼容性: 也可使用Oracle JDK 17
3)包名定义
  • 命名规则: 包名为org.itzixi(可自定义)
  • 项目标识: artifactId保持为wechat-dev
4)创建项目

  • 目录结构:
    • src/main/java: Java源代码
    • src/main/resources: 配置文件
    • src/test: 测试代码
  • POM文件: 管理依赖和环境配置
  • 字体设置: 建议调整IDE字体大小至32便于查看
5)创建子工程
  • 子工程名称定义08:22
    • 命名规范: 二级工程采用wechat-前缀,如wechat-common
    • 三级工程: 直接使用业务名称,如auth-service
  • 创建common工程08:57
    • 步骤: 右键项目 → New → Module
    • 模块类型: 选择Maven项目
    • 一级工程和二级工程关联09:59
      • 父子关系: 子工程通过标签声明父工程
      • 模块管理: 父工程通过标签管理子模块
      • 打包方式:
        • pom: 用于管理工程(不参与打包)
        • jar: 默认打包方式(推荐)
        • war: 传统web项目打包方式(已淘汰)
6)继续构建
  • 创建二级工程pojo13:41
    • 命名: wechat-pojo
    • 功能: 专门存放数据模型类
  • 创建二级工程API14:22
    • 特点: 作为pom类型工程管理web相关模块
    • 打包方式: 必须声明pom
  • 创建三级工程15:06
    • 创建三级工程auth-service-8815:38
      • 命名规范: 服务名+端口号(如auth-service-88)
      • 优点: 便于识别服务对应的端口号
      • 依赖关系: 父工程为api
    • 定义层级问题17:24
      • 灵活性: 三级工程可直接依赖总工程,视觉两级但逻辑三级
      • 推荐做法: 严格三级结构更清晰
    • 创建三级工程main-service-7718:14
      • 端口定义: 使用77端口
      • 核心业务: 包含主要业务逻辑
    • 创建三级工程file-service-5518:50
      • 功能范围: 处理文件上传、音频转文字等文件相关操作
      • 端口定义: 使用55端口

二、项目结构应用



20:00



1. Maven项目结构
  • 模块组成:项目包含三个核心模块:
    • auth−service−88auth-service-88auth−service−88
    • main−service−77main-service-77main−service−77
    • file−service−55file-service-55file−service−55

    

  • 父项目配置:使用wechat−devwechat-devwechat−dev作为父项目,统一管理子模块版本号为1.0−SNAPSHOT1.0-SNAPSHOT1.0−SNAPSHOT



2. POM文件配置
  • 关键配置项:
    • modelVersion:固定为4.0.0
    • packaging:父项目必须声明为pom类型
    • modules:通过标签声明子模块
  • 依赖管理:所有子模块继承父项目的groupId(org.itzixiorg.itzixiorg.itzixi)和版本号
3. Maven生命周期命令
  • 核心命令:
    • clean:清理编译结果
    • validate:验证项目正确性
    • compile:编译源代码
    • test:运行单元测试
    • package:打包生成制品
    • verify:检查包质量
    • install:安装到本地仓库
    • deploy:发布到远程仓库
  • 执行顺序:命令按生命周期阶段顺序执行,前阶段未完成则后续阶段不会执行
4. 项目构建验证
  • 构建验证:
    • 必须执行install命令使项目结构生效
    • 控制台出现BUILD SUCCESS表示构建成功
    • 构建时间显示(示例中为0.506s0.506s0.506s)反映项目复杂度
  • 模块关系:
    • 父POM通过标签管理子模块
    • 子模块通过标签引用父项目
5. 构建结果分析
  • 成功标志:
    • 每个模块显示构建耗时(如auth−service−88auth-service-88auth−service−88耗时360ms360ms360ms)
    • 最终显示Total time统计总构建时间
    • 进程退出码为0表示正常结束
  • 制品生成:
    • 子模块生成jar包(如file−service−55:jarfile-service-55:jarfile−service−55:jar)
    • 版本号统一为1.0−SNAPSHOT1.0-SNAPSHOT1.0−SNAPSHOT



三、知识小结

知识点 核心内容 关键操作/易错点 难度系数
项目工程结构设计 分层架构设计(总工程→二级子工程→三级微服务) 父子工程依赖关系管理、pom.xml配置 ⭐⭐⭐
Maven多模块构建 使用标签管理层级关系 打包方式选择(pom/jar/war)、依赖传递规则 ⭐⭐⭐⭐
微服务拆分原则 按功能划分:auth-service/main-service/file-service 端口号命名规范(服务名+端口号) ⭐⭐⭐
开发环境配置 JDK17+IDEA+Maven环境搭建 字体大小调整、工程视图层级检查 ⭐⭐
通用组件封装 common模块存放工具类/通用组件 避免循环依赖、接口抽象设计 ⭐⭐⭐⭐
Web层规范 api模块集中管理Web相关配置(跨域/拦截器) 与业务微服务的依赖关系处理 ⭐⭐⭐
实体类管理 pojo模块统一存放entity/dto/vo等对象 序列化规范、Lombok使用注意事项 ⭐⭐