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


个人观点,仅供参考

相关推荐
eSsO KERF6 小时前
湖仓一体架构解析:数仓架构选择(第48天)
架构
Ken_11157 小时前
SpringCloud系列(63)--Nacos读取不同配置之DataID配置方案
spring cloud
程序员小胖胖8 小时前
来聊聊我为什么放弃了三层架构
架构
Jiude9 小时前
当给飞书里的 OpenClaw 机器人发一条消息后,到底发生了什么?
架构
淡定o10 小时前
Redis List 换成 Streams,以为能睡安稳觉了——结果消息还是在丢
架构
亚历克斯神10 小时前
Java 代码质量与静态分析:2026 实战指南
java·spring·微服务
沛沛rh4510 小时前
用 Rust 实现用户态调试器:mini-debugger项目原理剖析与工程复盘
开发语言·c++·后端·架构·rust·系统架构
SamDeepThinking11 小时前
Spring AOP记录日志,生产环境的代码长什么样
java·后端·架构
陈天伟教授12 小时前
四川省中小学和职业院校教师校长省级培训专家库专家名单
人工智能·安全·架构
亚马逊云开发者12 小时前
【Bedrock AgentCore】Multi-Agent 架构实战:用 6 个 Agent 打通零售供应链数据→洞察→行动全链路
大数据·架构·零售