熔断降级的理解和基于feign的熔断降级

什么是熔断降级:

在微服务保护中我们使用sentinel进行了熔断降级,熔断降级时为了防止雪崩效应,什么是雪崩效应,因为微服务是一层调用一层的,如果下面某一个微服务宕机了,就会导致全部的微服务宕机,这就是雪崩效应。 我们这里使用的是feign的熔断降级,但是据说现在已经很少人用了,用sentinel的比较多

熔断降级的理解和基于feign的熔断降级_第1张图片

 

如何解决由于微服务异常引起的雪崩效应呢?

可以采用熔断、降级的方法去解决。

熔断降级的相同点都是为了解决微服务系统崩溃的问题,但它们是两个不同的技术手段,两者又存在联系。

熔断:

当下游服务异常而断开与上游服务的交互,它就相当于保险丝,下游服务异常触发了熔断,从而保证上游服务不受影响。

熔断降级的理解和基于feign的熔断降级_第2张图片

降级:

当下游服务异常触发熔断后,上游服务就不再去调用异常的微服务而是执行了降级处理逻辑,这个降级处理逻辑可以是本地一个单独的方法。

熔断降级的理解和基于feign的熔断降级_第3张图片

 两者都是为了保护系统,熔断是当下游服务异常时一种保护系统的手段,降级是熔断后上游服务处理熔断的方法。

具体处理代码

在FeignClient中指定fallbackFactory ,如下:

Java
@FeignClient(value = "media-api",configuration = MultipartSupportConfig.class,fallbackFactory = MediaServiceClientFallbackFactory.class)

定义MediaServiceClientFallbackFactory如下:

Java
@Slf4j
@Component
public class MediaServiceClientFallbackFactory implements FallbackFactory {
    @Override
    public MediaServiceClient create(Throwable throwable) {
        return new MediaServiceClient(){
            @Override
            public String uploadFile(MultipartFile upload, String objectName) {
                //降级方法
                log.debug("调用媒资管理服务上传文件时发生熔断,异常信息:{}",throwable.toString(),throwable);
                return null;
            }
        };
    }
}

降级处理逻辑:

返回一个null对象,上游服务请求接口得到一个null说明执行了降级处理。

你可能感兴趣的:(java,运维,开发语言)