【架构实战】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组件?有没有遇到什么坑?


个人观点,仅供参考

相关推荐
mldong9 分钟前
审批详情页高亮的那个节点,"名字"其实是一串 id:jeeflow 工作流引擎的四块数据来源
后端·架构
数据狐(Datafox)9 小时前
淘宝图片搜索 API 落地实战:基于以图搜货搭建跨境电商选品系统
java·大数据·微服务
qq_4523962311 小时前
第十四篇:《Codex 源码拆解:137 个 crate 构成的智能体架构》
架构
MobotStone11 小时前
做了几个 Agent 项目后,我发现:真正拉开 AI 产品经理差距的,不是技术
人工智能·架构
IT大白鼠12 小时前
DeepSeek Harness 详解开源插件化 AI Agent 运行时:架构、模式、安装与生态
人工智能·架构·开源
这个DBA有点耶13 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba
Gl�ria14 小时前
MySQL 单机版 vs 高可用版:宕机排查 + 故障处理
mysql·adb·架构
Devlive 开源社区15 小时前
KnowForge 2026.0.8 发布:协作写作、团队空间、AI 朗读,这次更新有点大
架构
53488736abcdefg15 小时前
Hive 入门&架构原理
hive·hadoop·架构