一、OpenFeign基本原理
1.声明式通信
Spring Cloud除了提供编程式调用之外,还提供了一种基于接口和注解的“声明式调用”方式
2.工作原理

装配原理:
- SpringBoot工程启动,通过@EnableFeignClients扫描所有@FeignClient对应的接口
- Feign框架的FeignClientFacotoryBean 为接口产生Proxy实例,并通过Spring容器注入到调用者
调用原理:
- 调用者通过OpenFeign接口调用某个方法,由Proxy实例转发至FeignFrameWork框架的InvocationHandler 对象
- 该 Handler 完成后续的 HTTP 转换, 发送, 接收, 翻译HTTP响应等工作
二、项目引入整合
1.引入依赖
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.1</version>
</dependency>
<!-- 负载均衡 新版本springboot弃用,这里手动引入 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
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<Long> createAddress(@RequestBody AddressRequest request);
}
GetMapping需要在feign中在参数上使用@RequestParam参数
4.异常执行代码
@Component//类自动实例化,当服务接口不可用时,进入到熔断器fallback的逻辑处理中,此时检查不到对应的实例,将无法使用
public class AddressFeignClientFallback implements AddressFeignClient{
@Override
public DataResult<Long> updateAddress(AddressRequest request) {
System.out.println("发生异常了!!");
return null;
}
}
三、其他
多个@FeignClient注解类 value设置为同一个服务解决方案
- 配置文件增加
spring:
main:
## @FeignClient(value = "服务名r") 设置可以有多个类存在相同的FeignClient 中的value值
allow-bean-definition-overriding: true
