SpringCloud分布式项目下feign的使用

SpringCloud分布式项目下feign的使用_第1张图片

 

新建一个feign的微服务(后面统称为A),其他项目要使用利用maven导入该服务模块的依赖就行了

导入依赖


    org.springframework.cloud
    spring-cloud-starter-openfeign

定义接口

@FeignClient(value = "leadnews-article")
public interface IArticleClient {

    @PostMapping("/api/v1/article/save")
    public ResponseResult saveArticle(@RequestBody ArticleDto dto) ;
}

另外一个微服务(value的值对应)的接口实现(后面统称为B),哪个微服务去实现这个接口,value就是什么

@RestController
public class ArticleClient implements IArticleClient {

    @Autowired
    private ApArticleService apArticleService;

    @Override
    @PostMapping("/api/v1/article/save")
    public ResponseResult saveArticle(@RequestBody ArticleDto dto) {
        return apArticleService.saveArticle(dto);
    }

}

接着在B项目中写mapper、service层的实现即可

C项目要访问B项目的接口这个时候直接访问A项目的接口就行了

A项目只是一个桥梁,C项目中利用

使用时自动注入即可,但是记得要导入A项目的依赖

@Autowired
    private IArticleClient articleClient;

主启动类还需要添加注解 

SpringCloud分布式项目下feign的使用_第2张图片

 

服务降级处理

SpringCloud分布式项目下feign的使用_第3张图片

 

  • 服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃

  • 服务降级虽然会导致请求失败,但是不会导致阻塞。

feign-api编写降级逻辑


/**
 * feign失败配置
 * @author itheima
 */
@Component
public class IArticleClientFallback implements IArticleClient {
    @Override
    public ResponseResult saveArticle(ArticleDto dto)  {
        return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,"获取数据失败");
    }
}

 在C微服务中添加类,扫描降级代码类的包

这里包路径是你的

@Configuration
@ComponentScan("com.heima.apis.article.fallback")
public class InitConfig {
}

在之前A服务的接口上添加这个 

SpringCloud分布式项目下feign的使用_第4张图片

C服务开启降级

nacos配置中心里添加如下内容,开启服务降级,也可以指定服务响应的超时的时间

feign:
  # 开启feign对hystrix熔断降级的支持
  hystrix:
    enabled: true
  # 修改调用超时时间
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 2000

你可能感兴趣的:(spring,cloud,分布式,spring)