SpringCloud入门之服务熔断

一、服务熔断介绍

1.1 服务雪崩

在微服务架构中,服务与服务之间通过远程调用的方式进行通信,一旦某个被调用的服务发生了故障,依赖其的服务也会发生故障,此时就会发生故障的蔓延,最终导致系统瘫痪,这就是所谓的”雪崩效应”。

1.2 服务熔断

熔断机制是应对雪崩效应的一种微服务链路保护机制。当链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”错误”的响应信息。当检测到该节点微服务响应正常后,重新恢复调用链路。

二、Hystrix

2.1 Hystrix 介绍

Hystrix 是一个用于分布式系统的延迟和容错的开源库。Hystrix 实现了断路器模式,当某个服务发生故障时,通过断路器的监控,给调用方返回一个错误响应,而不是长时间的等待,这样就不会使得调用方由于长时间得不到响应而占用线程,从而防止故障的蔓延。Hystrix 具备服务降级、服务熔断、线程隔离、请求缓存、请求合并及服务监控等强大功能。

2.2 Hystrix 使用方法

通过在方法上使用注解 @HystrixCommand ,常用参数:

* fallbackMethod:指定服务降级处理方法;
* ignoreExceptions:忽略某些异常,不发生服务降级;
* commandKey:命令名称,用于区分不同的命令;
* groupKey:分组名称,Hystrix会根据不同的分组来统计命令的告警及仪表盘信息;
* threadPoolKey:线程池名称,用于划分线程池。

二、服务降级实例

注:本实例在 ribbon-service 项目基础上演示。

2.1 在 pom 文件中新增 Hystrix 依赖

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.2 开启断路器功能

RibbonServiceApplication 中添加 @EnableCircuitBreaker 注解启用 Hystrix 断路器功能

@EnableCircuitBreaker
@SpringBootApplication
public class RibbonServiceApplication {
    ......
}

2.3 新增失败降级回调方法

@RestController
public class UserRibbonController {

    @Value("${service-url.user-service}")
    private String userServiceUrl;
    private final RestTemplate restTemplate;

    public UserRibbonController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }  
    
    @GetMapping("/get/{username}")
    @HystrixCommand(fallbackMethod = "fallbackMethod")
    public User getUser(@PathVariable String username) {
        return restTemplate.getForObject(userServiceUrl + "/user/{1}", User.class, username);
    }

    public User fallbackMethod(@PathVariable String username) {
        return new User("服务调用失败");
    }
}    

2.4 启动服务

访问 http://localhost:8210/user/get/marklogzhu,返回如下 JSON 数据:

{
  username: "marklogzhu"
}

停止 user-service ,再次访问 http://localhost:8210/user/get/marklogzhu,返回如下 JSON 数据:

{
	username: "服务调用失败"
}

可以发现已经发生了服务降级。

猜你喜欢

转载自www.cnblogs.com/markLogZhu/p/12970370.html
今日推荐