SpringCloud项目中实现服务降级

发布时间 2023-06-10 22:05:11作者: wzh_Official

服务降级描述

  • 服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃
  • 服务降级虽然会导致请求失败,但是不会导致阻塞。

实现思路
服务A使用Feign远程调用服务B。当服务A的访问量过大,服务B已无法支持服务A的调用,可能会中断服务。此时就需要进行服务降级,确保服务B不会崩溃。
需要在Feign接口中编写降级逻辑;在服务A中编写配置类,扫描降级代码类的包;在Feign远程接口中通过@FeignClient注解中的fallback属性指向降级代码;在服务A的配置文件中开启服务降级,也可以指定服务响应的超时的时间。

实现步骤示例

  1. 在heima-leadnews-feign-api编写降级逻辑
点击查看代码
package com.heima.apis.article.fallback;

import com.heima.apis.article.IArticleClient;
import com.heima.model.article.dtos.ArticleDto;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import org.springframework.stereotype.Component;

/**
 * feign失败配置
 * @author itheima
 */
@Component
public class IArticleClientFallback implements IArticleClient {
    @Override
    public ResponseResult saveArticle(ArticleDto dto)  {
        return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,"获取数据失败");
    }
}
  1. 在自媒体微服务中添加类,扫描降级代码类的包
点击查看代码
@Configuration
@ComponentScan("com.heima.apis.article.fallback")
public class InitConfig {
}
  1. 远程接口中指向降级代码
点击查看代码
@FeignClient(value = "leadnews-article",fallback = IArticleClientFallback.class)
public interface IArticleClient {

    @PostMapping("/api/v1/article/save")
    public ResponseResult saveArticle(@RequestBody ArticleDto dto);
}
  1. nacos配置中心里添加如下内容,开启服务降级,也可以指定服务响应的超时的时间
点击查看代码
feign:
  # 开启feign对hystrix熔断降级的支持
  hystrix:
    enabled: true
  # 修改调用超时时间
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 2000