新建一个feign的微服务(后面统称为A),其他项目要使用利用maven导入该服务模块的依赖就行了
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
定义接口
@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;
主启动类还需要添加注解
服务降级处理
-
服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃
-
服务降级虽然会导致请求失败,但是不会导致阻塞。
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服务的接口上添加这个
C服务开启降级
nacos配置中心里添加如下内容,开启服务降级,也可以指定服务响应的超时的时间
feign:
# 开启feign对hystrix熔断降级的支持
hystrix:
enabled: true
# 修改调用超时时间
client:
config:
default:
connectTimeout: 2000
readTimeout: 2000