Spring cloud 0基础介绍

一、先理解什么是“微服务”?

想象你有一个大超市(传统单体应用),所有商品都在一个大厅里。如果某类商品(比如生鲜区)出了问题,整个超市可能都要关闭维修。

而“微服务”就像把超市拆分成多个小店(生鲜店、日用品店、零食店...),每个小店独立运营。如果生鲜店出问题,其他店还能正常营业。Spring Cloud 就是管理这些小店的工具包


二、Spring Cloud 核心功能(通过例子理解)

假设我们要做一个电商系统,拆分成两个微服务:

  1. 用户服务:管理用户信息

  2. 订单服务:管理订单信息

1. 服务注册与发现(Eureka)
  • 问题:订单服务如何找到用户服务的地址?

  • 解决:用一个“电话簿”(注册中心)记录所有服务的位置。

实例代码

  1. 创建注册中心(类似电话簿):

    @SpringBootApplication
    @EnableEurekaServer  // 声明这是注册中心
    public class RegistryCenterApplication {
        public static void main(String[] args) {
            SpringApplication.run(RegistryCenterApplication.class, args);
        }
    }
    • 配置文件 application.yml

      server:
        port: 8761  # 默认注册中心端口
      eureka:
        client:
          register-with-eureka: false  # 自己不注册自己
          fetch-registry: false
  2. 用户服务注册到电话簿

    @SpringBootApplication
    @EnableEurekaClient  // 声明自己是客户端,要注册
    public class UserServiceApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserServiceApplication.class, args);
        }
    }
    • 配置文件 application.yml

      server:
        port: 8081
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:8761/eureka/  # 注册中心的地址

2. 服务调用(Feign 或 RestTemplate)
  • 问题:订单服务如何调用用户服务的接口?

  • 解决:通过注册中心查找用户服务的地址,并发送HTTP请求。

实例代码

  1. 订单服务中调用用户服务

    @FeignClient(name = "user-service")  // 指定要调用的服务名
    public interface UserServiceClient {
        @GetMapping("/users/{id}")  // 调用用户服务的接口
        User getUser(@PathVariable Long id);
    }
  2. 在订单服务中使用Feign

    @RestController
    public class OrderController {
        @Autowired
        private UserServiceClient userServiceClient;
    
        @GetMapping("/order/{userId}")
        public Order getOrder(@PathVariable Long userId) {
            User user = userServiceClient.getUser(userId); // 直接调用用户服务
            return new Order("订单123", user);
        }
    }

3. 负载均衡(Ribbon)
  • 问题:如果用户服务有多个实例(比如8081、8082端口),订单服务该调用哪个?

  • 解决:Ribbon 会自动分配请求,避免某个服务压力过大。

配置

  • 默认已集成在 Feign 中,无需额外代码。


4. 断路器(Hystrix)
  • 问题:如果用户服务宕机,订单服务一直等待会崩溃吗?

  • 解决:Hystrix 会在服务不可用时快速失败,并返回预设的备用响应。

实例代码

@FeignClient(name = "user-service", fallback = UserServiceFallback.class)
public interface UserServiceClient {
    // ...
}

@Component
public class UserServiceFallback implements UserServiceClient {
    @Override
    public User getUser(Long id) {
        return new User("默认用户", "服务暂不可用"); // 备用响应
    }
}

三、Spring Cloud 的总结

  • 核心功能:服务注册与发现、负载均衡、服务调用、熔断降级。

  • 优势:让微服务之间的协作变得简单,像搭积木一样构建系统。

  • 适用场景:大型分布式系统,需要高可用、易扩展的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值