一、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