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 服务对应接口不可用

如何使用Netflix Hystrix使服务降级

Hystrix 是 Netflix 公司提供的服务降级框架,Spring Cloud OpenFeign 默认集成了 hystrix,所以引入了spring-cloud-starter-openfeign 依赖就可以使用 hystrix 了。

① 使用 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<NacosProviderService> {
    @Override
    public NacosProviderService create(Throwable throwable) {
        return new NacosProviderService() {
            @Override
            public String hello() {
                System.out.println(throwable.getMessage());
                return "服务降级";
            }
        };
    }
}

测试:

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值