Files
Spring-cloud-2025.1.1/README.md
lingxiao865 cc7f00659b 1
2026-02-10 08:54:19 +08:00

188 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Lingxiao 微服务项目
## 概述
Lingxiao 是一个基于 Spring Boot 4.0.2 构建的微服务示例项目,采用多模块 Maven 结构,包含认证服务、网关服务和业务服务。项目集成了 OpenTelemetry 分布式追踪、Spring Cloud 微服务组件、Kubernetes 服务发现与部署支持。
## 技术栈
- **Java 25** (使用 Maven 编译)
- **Spring Boot 4.0.2**
- **Spring Cloud 2025.1.1** (微服务基础设施)
- **Spring Security OAuth2** (认证与授权)
- **OpenTelemetry** (分布式追踪与日志)
- **Spring Cloud Gateway** (反应式网关)
- **Spring Cloud Kubernetes Fabric8** (Kubernetes 集成)
- **Caffeine** (本地缓存)
- **MySQL** (关系数据库)
- **Redis** (会话与缓存存储)
- **GraalVM Native Image** (原生镜像支持)
- **Kubernetes** (容器编排)
## 项目结构
```
lingxiao/
├── auth/ # 认证服务模块
│ ├── src/main/java/com/example/springboot4/
│ │ └── Springboot4Application.java
│ ├── pom.xml
│ └── HELP.md
├── gateway/ # 网关服务模块
│ ├── src/main/java/com/example/geteway/
│ │ └── GatewayApplication.java
│ ├── pom.xml
│ └── HELP.md
├── a-service/ # 业务服务模块
│ ├── src/main/java/com/example/demo001/
│ │ └── Demo001Application.java
│ ├── pom.xml
│ └── HELP.md
├── k8s/ # Kubernetes 部署配置
│ ├── auth-deployment.yaml
│ ├── gateway-deployment.yaml
│ ├── a-service-deployment.yaml
│ └── secrets.yaml
├── keys/ # 密钥文件(非版本控制)
├── pom.xml # 父项目配置
├── mvnw # Maven 包装器
└── mvnw.cmd
```
## 模块说明
### 1. Auth (认证服务)
- 基于 Spring Security OAuth2 Authorization Server 实现认证与授权
- 使用 Jetty 作为内嵌 Web 容器(替换默认 Tomcat
- 集成 MySQL 数据库与 Redis 会话存储
- 支持 GraalVM 原生镜像构建
- 服务端口9000
### 2. Gateway (网关服务)
- 基于 Spring Cloud Gateway 的反应式 API 网关
- 集成 OAuth2 Resource Server 进行请求鉴权
- 服务端口8083
### 3. A-Service (业务服务)
- 基于 WebFlux 的反应式业务服务
- 使用 HTTP 服务客户端 (`HttpServiceGroup`) 调用外部 API
- 服务端口8091
## 构建与运行
### 前提条件
- JDK 25+
- Maven 3.6+
- Docker (用于容器化构建)
- Kubernetes 集群 (可选,用于部署)
### 构建项目
```bash
# 编译所有模块
./mvnw clean compile
# 打包所有模块(跳过测试)
./mvnw clean package -DskipTests
```
### 运行单个服务
```bash
# 运行认证服务
cd auth
../mvnw spring-boot:run
# 运行网关服务
cd gateway
../mvnw spring-boot:run
# 运行业务服务
cd a-service
../mvnw spring-boot:run
```
### 构建原生镜像 (GraalVM)
```bash
# 构建 auth 模块原生镜像
cd auth
../mvnw native:compile -Pnative
# 运行原生镜像
./target/springboot4
```
### 构建 Docker 镜像
每个模块都包含 Dockerfile可使用以下命令构建
```bash
# 构建 auth 镜像
cd auth
../mvnw spring-boot:build-image -DskipTests
```
## Kubernetes 部署
项目包含完整的 Kubernetes 部署配置,位于 `k8s/` 目录:
### 部署步骤
1. 构建 Docker 镜像并推送到镜像仓库
2. 创建密钥 Secret
```bash
kubectl apply -f k8s/secrets.yaml
```
3. 部署服务:
```bash
kubectl apply -f k8s/auth-deployment.yaml
kubectl apply -f k8s/gateway-deployment.yaml
kubectl apply -f k8s/a-service-deployment.yaml
```
### 服务访问
部署后,服务将通过 LoadBalancer 类型暴露:
- **Auth Service**: `http://<cluster-ip>:9000`
- **Gateway Service**: `http://<cluster-ip>:8083`
- **A-Service**: `http://<cluster-ip>:8091`
## 配置说明
### OpenTelemetry 集成
项目已配置 OpenTelemetry 日志 appender 和 TraceId 过滤器,用于分布式追踪:
- `InstallOpenTelemetryAppender`: 配置日志与 OpenTelemetry 集成
- `TraceIdFilter`: 在 HTTP 请求中添加 Trace ID
### 日志配置
每个模块包含 `logback-spring.xml` 配置文件,支持结构化日志输出。
### 数据库配置
Auth 模块使用 MySQL 数据库,配置在 `application.properties` 中。
## 开发指南
### 添加新模块
1. 在父 `pom.xml` 的 `<modules>` 部分添加新模块
2. 创建模块目录和 `pom.xml`
3. 继承父项目配置,添加所需依赖
### 代码风格
- 使用 Lombok 减少样板代码
- 遵循 Spring Boot 最佳实践
- 使用 Java 25 新特性
## 故障排除
### 常见问题
1. **服务启动失败**:检查端口是否被占用,数据库连接是否正常
2. **Kubernetes 部署失败**:检查镜像拉取策略和 Secret 配置
3. **原生镜像构建失败**:确保 GraalVM 25+ 正确安装
### 日志查看
```bash
# 查看 Kubernetes Pod 日志
kubectl logs -f <pod-name>
```
## 许可证
本项目为示例项目,仅供学习参考。
## 贡献
欢迎提交 Issue 和 Pull Request 改进本项目。