将feign的远程调用接口抽象到一个公共的模块中,实现feign接口的复用。
feign依赖添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
使用:
feign接口上需要加上以下注解..(value="service-search"为服务提供者)..(fallback为指定的服务降级方法类路径)降级类实现feign接口既可重写降级方法
@FeignClient(value="service-search",fallback=GoodsFeignClientFallback.class)
public interface xx {
@GetMapping("/api")
public Result<CategoryView> findByxxx(@PathVariable("SkuId") Long SkuId);
接口使用者:启动类加上此注解,指定feign接口所在的包.并且导入feign模块
@EnableFeignClients(basePackages= {
"xxx.xxx.feign.search"
})
1.1、feign接口的包扫描路径单独指定
//启动类包扫描.
@EnableFeignClients(basePackages= {
"xxx.xxx.feign.search"
//数组可以指定多个包以,分隔
})
1.2、关于服务降级的类可以借助于spring boot的自动化配置原理
自动化配置原理:
resources资源目录下创建META-INF/spring.factories写入如下配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.xxx.xx.feign.search.fallbck.GoodsFeignClientFallback\,
AAAA\,
BBBB
1.3、多个feign接口使用@FeignClient注解调用同一个名称的微服务时,启动时会引发此异常(任选一个方法)
方法一: 将feign接口合并
方法二: 在配置文件中增加配置 spring.main.allow-bean-definition-overriding=true
方法三: 在@FeignClient注解上增加contextId属性,确保每个feign client的contextId唯一。如@FeignClient(name = "服务名",
contextId="唯一名称")