OpenFeign配置及基本原理


目录
  • 一、OpenFeign基本原理
  • 二、项目引入整合
      • 1.引入依赖
      • 2.启动类增加注解
      • 3.定义feign客户端
      • 4.异常执行代码
      • 三、其他

一、OpenFeign基本原理

1.声明式通信

Spring Cloud除了提供编程式调用之外,还提供了一种基于接口和注解的“声明式调用”方式

2.工作原理

image-20210122162416172

装配原理:

  1. SpringBoot工程启动,通过@EnableFeignClients扫描所有@FeignClient对应的接口
  2. Feign框架的FeignClientFacotoryBean 为接口产生Proxy实例,并通过Spring容器注入到调用者

调用原理:

  1. 调用者通过OpenFeign接口调用某个方法,由Proxy实例转发至FeignFrameWork框架的InvocationHandler 对象
  2. 该 Handler 完成后续的 HTTP 转换, 发送, 接收, 翻译HTTP响应等工作

二、项目引入整合

1.引入依赖

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

2.启动类增加注解

@EnableFeignClients

@EnableFeignClients
public class DemoServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoServiceApplication.class, args);
    }

}

3.定义feign客户端

@FeignClient注解含义

  • value :注册的微服务名称
  • path:微服务地址
  • fallbackFactory :发生异常时执行代码
  • 此方法可以调用/account-service/address/createAddress接口
@FeignClient(value = "hld-account-service", path = "/account-service", fallbackFactory = AddressFeignClientFallback.class)
public interface AddressFeignClient {
    /**
     * 添加常用地址信息
     *
     * @param request 常用地址请求对象
     * @return 返回添加结果数据
     **/
    @ApiOperation("添加常用地址信息")
    @PostMapping("/address/createAddress")
    DataResult createAddress(@RequestBody AddressRequest request);
}

4.异常执行代码

@Component//类自动实例化,当服务接口不可用时,进入到熔断器fallback的逻辑处理中,此时检查不到对应的实例,将无法使用
public class AddressFeignClientFallback implements AddressFeignClient{
 @Override
            public DataResult updateAddress(AddressRequest request) {
				System.out.println("发生异常了!!");
                return null;
            }
}

三、其他

多个@FeignClient注解类 value设置为同一个服务解决方案

  • 配置文件增加
spring:
  main:
    ## @FeignClient(value = "服务名r") 设置可以有多个类存在相同的FeignClient 中的value值
    allow-bean-definition-overriding: true