← 返回首页

Spring Cloud:微服务全家桶

📂 java ⏱ 1 min 200 words

Spring Cloud:微服务全家桶

概述

Spring Cloud是一套完整的微服务解决方案,它提供了服务注册、配置中心、网关、负载均衡等丰富的组件。

1. 服务注册(Nacos)

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class ServiceProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderApplication.class, args);
    }
}

2. 服务消费者

import org.springframework.cloud.client.loadbalancer.LoadBalanced;

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

@Service
public class ConsumerService {
    private final RestTemplate restTemplate;
    public ConsumerService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    public User getUser(Long id) {
        return restTemplate.getForObject(
            "http://user-service/api/users/" + id, User.class);
    }
}

3. 配置中心

import org.springframework.cloud.context.config.annotation.RefreshScope;

@RefreshScope
@RestController
public class ConfigController {
    @Value("${config.key:default}")
    private String configKey;

    @GetMapping("/config")
    public String getConfig() {
        return configKey;
    }
}

4. 网关(Spring Cloud Gateway)

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator routes(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("user-service", r -> r
                .path("/api/users/**")
                .uri("lb://user-service"))
            .route("order-service", r -> r
                .path("/api/orders/**")
                .uri("lb://order-service"))
            .build();
    }
}

5. 熔断器(Resilience4j)

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;

@Service
public class ResilientService {
    @CircuitBreaker(name = "userService", fallbackMethod = "fallback")
    @Retry(name = "userService")
    public User getUser(Long id) {
        return userClient.getUserById(id);
    }

    public User fallback(Long id, Exception e) {
        return new User(id, "默认用户");
    }
}

最佳实践

  1. 使用Nacos:统一管理服务注册和配置
  2. 使用Gateway:统一入口,路由转发
  3. 使用熔断器:防止服务雪崩
  4. 分布式追踪:监控服务调用链
  5. 健康检查:使用Actuator监控服务状态

总结

Spring Cloud提供了完整的微服务解决方案,掌握Nacos、Gateway、Resilience4j等组件,可以快速构建和部署微服务系统。