Nacos(1.6)- nacos 服务消费(服务熔断与降级,以及Hystrix的使用)

Nacos(1.6)- nacos 服务消费(服务熔断与降级,以及Hystrix的使用)

服务熔断与降级概念

熔断:当下游服务报错不可用时,上游服务为了保证整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源

降级:当下游服务响应过慢或者不可用时,上游服务调用下游服务的降级逻辑,立即返回结果,熔断可以看成是降级的一种形式

降级有如下几种类型:

  • 超时降级
  • 失败次数降级
  • 故障降级
  • 限流降级

参考:
https://blog.csdn.net/Milogenius/article/details/104934611
https://blog.csdn.net/ityouknow/article/details/81230412

为何要使用服务降级

解释了降级的概念,可以先看下如下例子:
在 nacos_demo_provider 服务中,http://127.0.0.1:9092/nacos-provider/hello 接口报错

@RestController
public class NacosProviderController {

    @Value("${server.port}")
    private String port;

    @GetMapping(value = "hello")
    public String hello() {
        int a = 0;
        int b = 1 / a;
        return "hello, i am from " + port;
    }
}

异常为:

java.lang.ArithmeticException: / by zero

nacos_demo_consumer 服务 http://127.0.0.1:9095/nacos-consumer/hello2 接口调用 nacos_demo_provider 服务 http://127.0.0.1:9092/nacos-provider/hello 接口,假设不做降级处理,那么nacos_demo_provider服务异常会直接导致 nacos_demo_consumer 服务对应接口不可用
Nacos(1.6)- nacos 服务消费(服务熔断与降级,以及Hystrix的使用)_第1张图片

如何使用Netflix Hystrix使服务降级

Hystrix 是 Netflix 公司提供的服务降级框架,Spring Cloud OpenFeign 默认集成了 hystrix,所以引入了spring-cloud-starter-openfeign 依赖就可以使用 hystrix 了。
Nacos(1.6)- nacos 服务消费(服务熔断与降级,以及Hystrix的使用)_第2张图片
① 使用 hystrix 前要将openfeign对hystrix支持的开关打开

feign:
  hystrix:
    enabled: true

② 配置 @FeignClient 中 fallback 或 fallbackFactory 属性,fallbackFactory 功能更强些,以 fallbackFactory 配置为例

/**
 * path 配置对应服务端的上下文路径
 */
@Component
@FeignClient(name = "nacos-provider", path = "nacos-provider", configuration = {FeignClientConfig.class}, fallbackFactory = HystrixClientFallbackFactory.class)
public interface NacosProviderService {

    @RequestMapping(method = RequestMethod.GET, value = "hello")
    String hello();
}

③ 编写降级处理类 HystrixClientFallbackFactory

package com.hs.nacos_demo_consumer;

import com.hs.nacos_demo_consumer.service.NacosProviderService;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

@Component
public class HystrixClientFallbackFactory implements FallbackFactory {
    @Override
    public NacosProviderService create(Throwable throwable) {
        return new NacosProviderService() {
            @Override
            public String hello() {
                System.out.println(throwable.getMessage());
                return "服务降级";
            }
        };
    }
}

测试:
Nacos(1.6)- nacos 服务消费(服务熔断与降级,以及Hystrix的使用)_第3张图片

你可能感兴趣的:(java,spring,cloud,zookeeper)