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


个人观点,仅供参考

相关推荐
胡萝卜术17 小时前
深度重构:Agent Skills——从 Prompt 工程到能力工程
javascript·架构·github
踏月的造梦星球17 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
韩楚风18 小时前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
通问AI18 小时前
Apple Intelligence 国行备案深度技术解析:阿里千问如何被集成到苹果端侧AI架构
人工智能·架构
明航咨询—张老师18 小时前
软考软件评测师技术深度剖析:2026年考试改革后的知识体系与备考架构
大数据·架构
一路向北North19 小时前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务
研究员子楚19 小时前
GEO行业发展标准体系白皮书V2.0-第10卷 · 全球篇:跨国标准协同与全球品牌语义治理框架
数据库·人工智能·microsoft·架构·geo
乐观的Terry1 天前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程
维基框架1 天前
维基框架(Wiki-Framework) 1.2.0:Mybatis 升级为主从读写分离
java·后端·架构
heimeiyingwang1 天前
【架构实战】SQL注入与XSS防御:常见Web漏洞的系统性修复
前端·sql·架构