【架构实战】Spring Cloud微服务实战入门

一、Spring Cloud是什么

Spring Cloud是基于Spring Boot的微服务开发框架,它提供了一系列工具,帮助开发者快速构建分布式系统的通用模式。

二、核心组件一览

组件 作用 替代方案
Eureka 服务注册与发现 Nacos、Zookeeper
Ribbon 客户端负载均衡 Feign、Spring Cloud LoadBalancer
Hystrix 熔断器 Sentinel
Zuul/Gateway API网关 Spring Cloud Gateway
Config 分布式配置 Nacos、Apollo
Sleuth 分布式追踪 Zipkin、Jaeger

三、快速开始

1. 服务注册中心 Eureka

xml 复制代码
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server
yaml 复制代码
# application.yml
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
java 复制代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

2. 服务提供者

yaml 复制代码
# provider.yml
spring:
  application:
    name: user-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {
    
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "User" + id, 25);
    }
}

3. 服务消费者

java 复制代码
@RestController
public class OrderController {
    
    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/order/{userId}")
    public Order getOrder(@PathVariable Long userId) {
        // 调用用户服务
        User user = restTemplate.getForObject(
            "http://user-service/user/" + userId, 
            User.class
        );
        return new Order(userId, user.getName());
    }
}

四、服务间通信

RestTemplate方式

java 复制代码
@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

Feign方式(推荐)

java 复制代码
@FeignClient(name = "user-service")
public interface UserClient {
    @GetMapping("/user/{id}")
    User getUser(@PathVariable("id") Long id);
}

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private UserClient userClient;
    
    public Order getOrder(Long userId) {
        User user = userClient.getUser(userId);
        return new Order(userId, user.getName());
    }
}

五、熔断器 Hystrix

java 复制代码
@RestController
@RequestMapping("/order")
public class OrderController {
    
    @HystrixCommand(fallbackMethod = "getUserFallback")
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {
        return restTemplate.getForObject(
            "http://user-service/user/" + id, 
            User.class
        );
    }
    
    // 降级方法
    public User getUserFallback(Long id) {
        return new User(id, "默认用户", 0);
    }
}

六、总结

Spring Cloud提供了一整套微服务解决方案,但组件众多,需要根据实际需求选择。推荐从Spring Cloud Alibaba开始,它集成度更高,文档更完善。

思考题:在你的项目中使用了哪些Spring Cloud组件?有没有遇到什么坑?


个人观点,仅供参考

相关推荐
ZhengEnCi2 分钟前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
Decay__1 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
华普微HOPERF4 小时前
Matter协议架构详解:数据模型与交互模型深度解析
microsoft·架构·交互
4SAPI5 小时前
多国产模型混合调度与企业级治理生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
大数据·人工智能·架构·php
QAQmmttyyy6 小时前
FlyAgent 开发实录 ⑪|消息流即真相源
架构
FPGA小迷弟7 小时前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
OCR_133716212757 小时前
从 “外设“ 到 “算力节点“:护照阅读器的轻上位机架构,正在改写集成范式
架构
第404号工位7 小时前
离职退电脑前别只点“清空回收站”!手把手教你彻底抹除凭证与数字痕迹
linux·python·架构
Oiiouui7 小时前
Godot-GridGame架构DI容器全局联动设计
架构·游戏引擎·godot
Dawson Zhu8 小时前
【AI编译器入门⑥】端到端编译流程实战:ONNX → TVM → TensorRT全链路
人工智能·语言模型·架构·aigc·agi