Skip to content

微服务示例

使用 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());
        
        // 如果任何步骤失败,全部回滚
    }
}

下一步

Released under the Apache License 2.0