抽取feign公共模块

将feign的远程调用接口抽象到一个公共的模块中,实现feign接口的复用。

feign依赖添加

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

使用:

feign接口上需要加上以下注解..(value="service-search"为服务提供者)..(fallback为指定的服务降级方法类路径)降级类实现feign接口既可重写降级方法

@FeignClient(value="service-search",fallback=GoodsFeignClientFallback.class)
public interface xx {

    @GetMapping("/api")
    public Result 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="唯一名称")

你可能感兴趣的:(java)