微服务示例
使用 LCGYL Framework 构建微服务架构。
服务架构
microservices/
├── user-service/ # 用户服务
├── order-service/ # 订单服务
├── product-service/ # 商品服务
└── gateway/ # API 网关用户服务
主应用类
java
@ComponentScan("com.example.user")
public class UserServiceApplication {
public static void main(String[] args) {
Application app = Application.run(UserServiceApplication.class, args);
app.startWebServer(8081);
}
}用户 Controller
java
@RestController("/users")
public class UserController {
private final UserService userService;
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}订单服务
主应用类
java
@ComponentScan("com.example.order")
public class OrderServiceApplication {
public static void main(String[] args) {
Application app = Application.run(OrderServiceApplication.class, args);
app.startWebServer(8082);
}
}订单 Controller
java
@RestController("/orders")
public class OrderController {
private final OrderService orderService;
private final UserServiceClient userServiceClient;
@PostMapping
public Order createOrder(@RequestBody OrderRequest request) {
// 调用用户服务验证用户
User user = userServiceClient.getUser(request.getUserId());
// 创建订单
return orderService.create(request, user);
}
}服务间调用
java
@Component
public class UserServiceClient {
private final RestTemplate restTemplate;
public User getUser(Long userId) {
String url = "http://user-service:8081/users/" + userId;
return restTemplate.getForObject(url, User.class);
}
}服务注册与发现
java
@Component
public class ServiceRegistry {
private final Map<String, String> services = new ConcurrentHashMap<>();
public void register(String serviceName, String serviceUrl) {
services.put(serviceName, serviceUrl);
}
public String discover(String serviceName) {
return services.get(serviceName);
}
}配置中心
properties
# user-service application.properties
service.name=user-service
service.port=8081
# order-service application.properties
service.name=order-service
service.port=8082
service.dependencies=user-service,product-service消息总线
java
@Component
public class OrderEventPublisher {
private final MessageProducer producer;
public void publishOrderCreated(Order order) {
OrderCreatedEvent event = new OrderCreatedEvent(order);
producer.send("order.created", event);
}
}
@MessageListener(topic = "order.created")
public class OrderCreatedListener {
public void onOrderCreated(OrderCreatedEvent event) {
// 处理订单创建事件
System.out.println("订单已创建: " + event.getOrderId());
}
}分布式事务
java
@Component
public class DistributedTransactionManager {
@Transactional
public void createOrderWithPayment(OrderRequest request) {
// 1. 创建订单
Order order = orderService.create(request);
// 2. 调用支付服务
Payment payment = paymentService.pay(order);
// 3. 更新库存
inventoryService.deduct(order.getItems());
// 如果任何步骤失败,全部回滚
}
}