Lumin Cloud 是一个基于 Spring Cloud 的微服务平台,已实现以下核心功能:
- ✅ 服务注册与发现 - Nacos
- ✅ 配置中心 - Nacos Config
- ✅ 认证授权中心 - OAuth2 + JWT
- ✅ 链路追踪 - Sleuth + Zipkin
- ✅ 限流熔断 - Sentinel
所有微服务都已集成 Nacos 服务注册与发现功能:
- lumin-gateway - API网关(端口8080)
- lumin-auth - 认证授权服务(端口9001)
- lumin-user - 用户服务(端口9002)
通过 bootstrap.yml 配置文件,所有服务启动时会从 Nacos 配置中心加载配置。
lumin-auth 模块实现了完整的 OAuth2 授权服务器:
- 支持多种授权模式:authorization_code、refresh_token、client_credentials、password
- 使用 RSA 密钥对进行 JWT 签名
- 提供 JWT 工具类用于令牌生成和验证
所有服务都集成了:
- Spring Cloud Sleuth - 自动生成 traceId 和 spanId
- Zipkin - 上报链路数据到 Zipkin Server
- 日志中包含链路追踪信息:
[%X{traceId:-},%X{spanId:-}]
所有服务都配置了 Sentinel:
- Gateway 层面对不同服务进行限流
- 服务层面可以配置细粒度的接口限流
- 支持从 Nacos 动态配置限流规则
确保以下基础设施已启动:
-
Nacos Server (端口 8848)
# 使用 Docker 启动 docker run -d --name nacos -p 8848:8848 -e MODE=standalone nacos/nacos-server:v2.3.0 -
Sentinel Dashboard (端口 8858)
# 使用 Docker 启动 docker run -d --name sentinel -p 8858:8858 bladex/sentinel-dashboard:1.8.6 -
Zipkin Server (端口 9411)
# 使用 Docker 启动 docker run -d --name zipkin -p 9411:9411 openzipkin/zipkin:latest
或者使用项目提供的 docker-compose.yml:
docker-compose up -d nacos sentinel zipkin# Windows
start-services.bat
# Linux/Mac
chmod +x start-services.sh
./start-services.sh# 启动网关
cd lumin-gateway
mvn spring-boot:run
# 启动认证服务
cd lumin-auth
mvn spring-boot:run
# 启动用户服务
cd lumin-user
mvn spring-boot:run-
查看 Nacos 控制台
- 访问:http://127.0.0.1:8848/nacos
- 用户名/密码:nacos/nacos
- 应该能看到三个服务已注册
-
访问网关健康检查
curl http://127.0.0.1:8080/health
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace:
group: DEFAULT_GROUPGateway 通过服务名进行路由:
spring:
cloud:
gateway:
routes:
- id: lumin-auth
uri: lb://lumin-auth # lb:// 表示负载均衡
predicates:
- Path=/auth/**在 Nacos 中创建配置文件:
- Data ID:
{service-name}-{profile}.yml - Group:
DEFAULT_GROUP
例如:
lumin-gateway-dev.ymllumin-auth-dev.ymllumin-user-dev.yml
bootstrap.yml > Nacos Config > application.yml
密码模式:
curl -X POST http://127.0.0.1:8080/auth/oauth2/token \
-H "Authorization: Basic bHVtaW4tY2xpZW50OnNlY3JldA==" \
-d "grant_type=password&username=admin&password=admin123&scope=read write"客户端模式:
curl -X POST http://127.0.0.1:8080/auth/oauth2/token \
-H "Authorization: Basic bHVtaW4tY2xpZW50OnNlY3JldA==" \
-d "grant_type=client_credentials&scope=read write"curl http://127.0.0.1:8080/user/api/user/info \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"jwt:
secret: "your-secret-key-here"
expiration: 7200 # 2小时
refresh-expiration: 604800 # 7天spring:
sleuth:
sampler:
probability: 1.0 # 采样率 0.0-1.0
zipkin:
base-url: http://127.0.0.1:9411/
enabled: true- 访问 Zipkin UI:http://127.0.0.1:9411
- 点击 "Run Query" 查看最近的请求链路
- 可以看到完整的调用链:Gateway -> Auth/User Service
日志中包含 traceId 和 spanId:
2024-01-01 12:00:00.000 [http-nio-8080-exec-1] [a1b2c3d4e5f6g7h8,i1j2k3l4m5n6o7p8] INFO ...
// 对认证服务限流:QPS = 200
rules.add(new GatewayFlowRule("lumin-auth")
.setCount(200)
.setIntervalSec(1));
// 对用户服务限流:QPS = 500
rules.add(new GatewayFlowRule("lumin-user")
.setCount(500)
.setIntervalSec(1));@PostConstruct
public void initFlowRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("getUserInfo");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // QPS = 100
rules.add(rule);
FlowRuleManager.loadRules(rules);
}- 访问:http://127.0.0.1:8858
- 用户名/密码:sentinel/sentinel
- 可以实时查看:
- QPS
- 响应时间
- 限流情况
- 熔断状态
# 网关健康检查
curl http://127.0.0.1:8080/health
# 用户服务健康检查(通过网关)
curl http://127.0.0.1:8080/user/api/user/health# 先获取 token
TOKEN=$(curl -X POST http://127.0.0.1:8080/auth/oauth2/token \
-H "Authorization: Basic bHVtaW4tY2xpZW50OnNlY3JldA==" \
-d "grant_type=password&username=admin&password=admin123&scope=read write" \
| jq -r '.access_token')
# 使用 token 访问用户信息
curl http://127.0.0.1:8080/user/api/user/info \
-H "Authorization: Bearer $TOKEN"使用 Apache Bench 或 JMeter 进行压力测试:
# 安装 Apache Bench
# Ubuntu: sudo apt-get install apache2-utils
# CentOS: sudo yum install httpd-tools
# 测试限流(发送1000个请求,并发10个)
ab -n 1000 -c 10 http://127.0.0.1:8080/user/api/user/info当超过限流阈值时,会返回 429 Too Many Requests。
检查项:
- Nacos 是否正常启动
- 配置文件中的
server-addr是否正确 - 网络是否通畅
- 查看应用日志是否有错误信息
检查项:
- Client ID 和 Secret 是否正确
- 用户名和密码是否正确
- Scope 是否在允许范围内
- 授权类型是否已配置
默认测试账号:
- admin / admin123
- user / user123
检查项:
- Zipkin 服务是否正常启动
spring.zipkin.base-url配置是否正确spring.sleuth.sampler.probability是否设置为 1.0- 查看应用日志是否有上报失败的错误
检查项:
- Sentinel Dashboard 是否正常启动
spring.cloud.sentinel.transport.dashboard配置是否正确- 服务是否有流量(Sentinel 是懒加载的,需要有请求才会显示)
- 检查防火墙是否阻止了 8719、8720、8721 端口
检查项:
- 确认使用了
bootstrap.yml而不是仅在application.yml中配置 - Nacos 中的 Data ID 是否正确(格式:
{service-name}-{profile}.yml) - Group 是否匹配
- 配置文件的 file-extension 是否为 yml
- 持久化配置 - 将配置保存到 Nacos 配置中心
- 数据库集成 - 添加 MyBatis Plus 和 MySQL 支持
- Redis 缓存 - 集成 Redis 用于缓存和会话管理
- 消息队列 - 集成 RabbitMQ 或 Kafka
- 分布式事务 - 集成 Seata
- API 文档 - 集成 Knife4j/Swagger
如有问题,请查看: