spring-cloud之Feign服务调用降级

2022年11月23日09:25:15

服务雪崩

如图-1,如果所有服务A/B/C网络/应用等都正常,同时能够快速的处理请求并返回,服务之间就可以正常的调度。

    如图-2,如果A服务出现异常情况(网络异常/内部数据库异常等)无法在指定的时间内返回B服务结果,那么由于C服务会持续的请求B服务,最终导致B服务积压了大量的请求而服务器奔溃不可用。

    如图-3,B服务由于A服务的不可用导致自身请求积压而崩溃,所以所有的请求蔓延到下游的C服务,最终也导致C服务不可用崩溃,如图-4所示。

    综上所述:服务雪崩就是由于上游(例如A)的服务异常不可用,最终蔓延到下游的所有服务,导致所有相关下游的微服务应用不可用而系统崩溃。

Feign使用Hystrix实现降级

Hystrix简介

    Hystrix是由Netfix开源的一个延迟和容错工具库,用于解决远程调用/服务或者第三方库防止级联失败提示系统的可用性和容错性。

Feign整合Hystrix

    之前的博文介绍过了spring cloud服务调用的两种方式,但是由于ribbon方式没有feign便捷。所以这里就只介绍feign方式使用htstrix实现服务降级,避免雪崩。

Maven依赖

    由于spring cloud版本有差异,所以需要说明一下我这里使用的spring boot是2.1.5.RELEASE版本,所以依赖的hystrix如下。如spring boot是1.X版本artifactId应该是spring-cloud-starter-hystrix。Version属性可以不填,会根据spring boot自动配置找到对应的版本。

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

Application配置文件

    Feign开启支持hystrix的方式是在配置文件中添加feign.hystrix.enabled=true。这个值默认是false,所以需要开启。

添加降级类

    Feign服务熔断降级其实是通过调度超时就调用本地的方法,而不是一直等待服务返回。Feign调度服务是通过接口+注解方式的,我们需要实现该接口用于实现服务降级调用本地方法。

@Component
public class UserFeignClientFallback implements UserFeignClientInterface {


    @Override
    public String get(String name) {
        return "error " + name;
    }
}

Feign接口类

    主要是通过@FeignClient的fallback属性定义降级后调用那个类的方法,这里方法名称等都是一致才可以。

@FeignClient(name = "PROVIDER-USER",
        fallback = UserFeignClientFallback.class)
public interface UserFeignClientInterface {

    @GetMapping(value = "/get")
    String get(@RequestParam(value = "name") String name);

}

验证步骤

  1. 启动注册中心
  2. 启动服务提供者
  3. 启动服务消费者
  4. 访问服务消费者,看是否正常调度服务提供者的方法
  5. 关闭服务提供者
  6. 访问服务消费者,看是否正常调度本地方法返回
  • 作者:知春秋
  • 原文链接:https://zhangyongjun.blog.csdn.net/article/details/90582746
    更新时间:2022年11月23日09:25:15 ,共 1456 字。