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

SpringCloud+Netty集群实战千万级 IM系统【一】
Flaw3-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 | docker run -p 4406:3306 --name mysql8-imooc \ |
安装mysql成功并且启动成功!
2.容器化安装Redis7
1 | docker pull redis:7.2.4 |
预先创建目录和文件,用于提供给redis容器做好目录映射:
1 | mkdir -p /home/redis6/conf |
运行redis:
1 | docker run -p 5379:6379 --name redis \ |
解释:
- 用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端口
- 创建三级工程auth-service-8815:38
二、项目结构应用
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通过
标签管理子模块 - 子模块通过
标签引用父项目
- 父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使用注意事项 | ⭐⭐ |












