天天看點

Feign的最佳實踐

方式一(繼承):給消費者的FeignClient和提供者的Controller定義統一的父接口作為标準。

Feign的最佳實踐

缺點

  • 服務緊耦合
  • 父接口參數清單中的映射不會被繼承
Feign的最佳實踐

方式二(抽取):将FeignClient抽取為獨立子產品,并且把接口有關的POJO、預設的Feign配置都放到這個子產品中,提供給所有消費者使用

Feign的最佳實踐

總結

Feign的最佳實踐:

①	讓controller和FeignClient繼承同一接口
②	将FeignClient、POJO、Feign的預設配置都定義到一個項目中,供所有消費者使用
           

抽取FeignClient

實作最佳實踐方式二的步驟如下:

  1. 首先建立一個module,命名為feign-api,然後引入feign的starter依賴
  2. 将order-service中編寫的UserClient、User、DefaultFeignConfiguration都複制到feign-api項目中
  3. 在order-service中引入feign-api的依賴
  4. 修改order-service中的所有與上述三個元件有關的import部分,改成導入feign-api中的包
  5. 重新開機測試

1.建立module,并導入依賴

Feign的最佳實踐

2.将order-service中編寫的UserClient、User、DefaultFeignConfiguration都複制到feign-api項目中,并将order-service中相同的檔案删除掉

Feign的最佳實踐
  1. 在order-service中引入feign-api的依賴
Feign的最佳實踐
  1. 修改order-service中的所有與上述三個元件有關的import部分,改成導入feign-api中的包
Feign的最佳實踐
Feign的最佳實踐
Feign的最佳實踐
  1. 重新開機測試

重新開機之後報錯,因為無法掃描到cn.itcast.feign的包

Feign的最佳實踐

解決方法

當定義的FeignClient不在SpringBootApplication的掃描包範圍時,這些FeignClient無法使用。

有兩種方式解決:

方式一:指定FeignClient所在包

方式二:指定FeignClient位元組碼

第一種

Feign的最佳實踐

第二種(推薦)

Feign的最佳實踐

總結

不同包的FeignClient的導入有兩種方式:

①	在@EnableFeignClients注解中添加basePackages,指定FeignClient所在的包
	②	在@EnableFeignClients注解中添加clients,指定具體FeignClient的位元組碼