下面是一个完整的 微服务拆分示例代码工程,采用 Spring Boot + Spring Cloud + Docker,演示了如何将“用户服务”和“订单服务”分成两个独立微服务,并通过 REST 接口通信完成一个简单的“下订单”流程。
✅ 微服务拆分实战代码(用户服务 + 订单服务)
🧱 项目结构
microservices-demo/
├── user-service/ --> 用户服务(独立 Spring Boot 应用)
├── order-service/ --> 订单服务(独立 Spring Boot 应用)
└── docker-compose.yml --> Docker 一键启动服务
🧩 1. 用户服务(user-service)
📁 user-service/src/main/java/com/example/user/UserServiceApplication.java
@SpringBootApplication
@RestController
@RequestMapping("/users")
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
// 假设返回用户信息
@GetMapping("/{id}")
public Map<String, String> getUser(@PathVariable String id) {
return Map.of("id", id, "name", "User_" + id);
}
}
📄 user-service/pom.xml
(关键依赖)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
📦 2. 订单服务(order-service)
📁 order-service/src/main/java/com/example/order/OrderServiceApplication.java
@SpringBootApplication
@RestController
@RequestMapping("/orders")
public class OrderServiceApplication {
@Autowired
private RestTemplate restTemplate;
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@PostMapping("/create/{userId}")
public Map<String, Object> createOrder(@PathVariable String userId) {
// 调用用户服务获取用户信息
Map userInfo = restTemplate.getForObject("http://localhost:8081/users/" + userId, Map.class);
return Map.of(
"orderId", UUID.randomUUID().toString(),
"user", userInfo,
"status", "CREATED"
);
}
}
📄 order-service/pom.xml
(关键依赖)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
🐳 3. 使用 Docker Compose 启动两个服务
📄 docker-compose.yml
version: '3.8'
services:
user-service:
build: ./user-service
ports:
- "8081:8080"
order-service:
build: ./order-service
ports:
- "8082:8080"
📌 注意:这里默认两个服务分别运行在 8081 和 8082 端口。
✅ 4. 构建与运行
确保你安装了 JDK、Maven、Docker,执行以下命令:
# 构建镜像
cd microservices-demo
docker-compose build
# 启动服务
docker-compose up
🔍 5. 测试接口调用
- 用户服务接口:
http://localhost:8081/users/1001 - 订单服务接口(内部调用用户服务):
http://localhost:8082/orders/create/1001
返回示例:
{
"orderId": "ccf7e11e-21d9-4b32-b7a1-c1e82ac9c62a",
"user": {
"id": "1001",
"name": "User_1001"
},
"status": "CREATED"
}
📌 小结
- 用户服务与订单服务完全解耦,分别启动
- 服务间通过 HTTP REST 调用(可替换为 Feign、gRPC、消息队列)
- Docker Compose 实现本地一键部署
- 可继续扩展:商品服务、库存服务、服务注册发现、网关、熔断限流等
如你希望:
- 增加服务注册中心(如 Nacos / Eureka)
- 用 Spring Cloud OpenFeign 替代
RestTemplate
- 改为 gRPC 通信或 Kafka 消息驱动
- 添加分布式链路追踪或数据库操作
我可以为你继续补充更多代码模块,是否继续深入?
发表回复