Spring Cloud:微服务全家桶
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, "默认用户");
}
}
最佳实践
- 使用Nacos:统一管理服务注册和配置
- 使用Gateway:统一入口,路由转发
- 使用熔断器:防止服务雪崩
- 分布式追踪:监控服务调用链
- 健康检查:使用Actuator监控服务状态
总结
Spring Cloud提供了完整的微服务解决方案,掌握Nacos、Gateway、Resilience4j等组件,可以快速构建和部署微服务系统。