微服务演示系统

一个基于Spring Boot的微服务演示项目,包含用户服务和订单服务,通过WebClient进行通信,支持Docker容器化部署。

  • by badarinath-katti
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 badarinath-katti/mcp

使用说明

Spring Boot微服务演示

该项目演示了两个Spring Boot微服务通过WebClient相互通信,使用Docker进行容器化,并可在多种配置中部署。

建筑

  • 用户服务 (端口8080):使用CRUD操作管理用户数据
  • 订单服务 (端口8081):管理订单并通过WebClient与用户服务通信

服务概述

用户服务

  • 公开REST端点以进行用户管理
  • 使用H2内存数据库
  • 提供健康检查端点
  • JPA/Hibernate用于数据持久化

订单服务

  • 管理订单数据
  • 通过WebClient调用用户服务来验证用户的存在
  • 提供订单详细信息和用户信息
  • 使用WebClient进行非阻塞HTTP通信

运行应用程序

先决条件

  • 已安装Docker和Docker Compose
  • Java 17+(用于本地开发)
  • Maven 3.6+(用于本地开发)

快速入门(自动脚本)

使用处理所有设置的自动脚本:

./run-docker.sh

此脚本将:

  • 检查Docker可用性
  • 构建Maven工件
  • 构建Docker镜像
  • 使用docker compose启动服务

Docker编写选项

  1. 标准设置 (推荐):
docker-compose up --build
  1. Render.com部署:
docker-compose -f docker-compose.render.yml up --build
  1. 联合服务 (单个容器):
docker build -f Dockerfile.combined -t combined-service .
docker run -p 8080:8080 -p 8081:8081 combined-service
  1. 使用Nginx代理:
docker build -f Dockerfile.proxy -t proxy-service .
docker run -p 80:80 proxy-service

地方发展

  1. 首先构建这两个服务:
# User Service
cd user-service && mvn clean package -DskipTests && cd ..
# Order Service  
cd order-service && mvn clean package -DskipTests && cd ..
  1. 启动用户服务:
cd user-service
mvn spring-boot:run
  1. 启动订单服务(在另一个终端中):
cd order-service
USER_SERVICE_URL=http://localhost:8080 SERVER_PORT=8081 mvn spring-boot:run

API终点

用户服务(http://localhost:8080)

  • GET /api/users/health -健康检查端点
  • GET /api/users -获取所有用户
  • GET /api/users/{id} -按ID获取用户
  • POST /api/users -创建新用户
  • PUT /api/users/{id} -更新用户
  • DELETE /api/users/{id} -删除用户

用户模型:

{
  "id": 1,
  "name": "John Doe",
  "email": "john@example.com"
}

订购服务(http://localhost:8081)

  • GET /api/orders/health -健康检查端点
  • GET /api/orders -获取所有订单
  • GET /api/orders/{id} -按ID获取订单
  • GET /api/orders/user/{userId} -按用户ID获取订单
  • GET /api/orders/{id}/with-user -使用用户详细信息获取订单(WebClient调用)
  • POST /api/orders -创建新订单(通过WebClient验证用户)
  • PUT /api/orders/{id} -更新订单
  • DELETE /api/orders/{id} -删除订单

订单型号:

{
  "id": 1,
  "userId": 1,
  "product": "Laptop",
  "quantity": 1,
  "totalAmount": 999.99
}

测试服务

自动化测试

运行测试所有端点的演示脚本:

./demo.sh

手动测试

  1. 健康检查:
curl http://localhost:8080/api/users/health
curl http://localhost:8081/api/orders/health
  1. 创建用户:
curl -X POST http://localhost:8080/api/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John Doe", "email": "john@example.com"}'
  1. 创建订单 (订单服务通过WebClient验证用户):
curl -X POST http://localhost:8081/api/orders \
  -H "Content-Type: application/json" \
  -d '{"userId": 1, "product": "Laptop", "quantity": 1, "totalAmount": 999.99}'
  1. 获取包含用户详细信息的订单 (演示WebClient通信):
curl http://localhost:8081/api/orders/1/with-user

部署选项

1.标准Docker编写

服务与docker组成网络独立运行。

2.联合服务

这两个服务都使用supervisord在单个容器中运行。

3.Nginx代理

服务在Nginx反向代理后面运行,以实现负载平衡。

4.云部署(Render.com)

优化了Render.com平台部署的配置。

Docker网络

服务通过Docker网络进行通信:

  • 发展: http://localhost:8080 和 http://localhost:8081
  • Docker Compose: http://user-service:8080 和 http://order-service:8081
  • 组合/代理:通过本地主机进行内部通信

主要特点

  • WebClient集成:服务之间的非阻塞HTTP通信
  • 多种部署策略:Docker Compose、组合容器、代理设置
  • 健康监测:内置健康检查端点
  • 数据库:使用JPA/Hibernate的H2内存数据库
  • 错误处理:正确的错误响应和记录
  • 云就绪:包含Render.com部署配置

可用脚本

  • ./run-docker.sh -自动化Docker设置和部署
  • ./demo.sh -API测试和演示
  • ./start-services.sh -备选启动脚本
  • ./push-to-registry.sh -容器注册表部署

故障排除

删除重复的订单服务文件夹:

rm -rf user-service/order-service/

清理和重建:

mvn clean package -DskipTests
docker-compose down && docker-compose up --build

检查日志:

docker-compose logs -f user-service
docker-compose logs -f order-service

停止服务

docker-compose down

对于联合服务:

docker stop <container-id>