@EnableFeignClients 註解配置項
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({FeignClientsRegistrar.class})
public @interface EnableFeignClients {
// 和 basePackages 互為別名
String[] value() default {};
// 指定基礎包(掃描這個包及子包下標註了 FeignClient 註解的介面,將會為其生成代理類注入到 spring 容器)
String[] basePackages() default {};
// 指定一個或多個類(介面),這些類所在的包作為基礎包(相當於不直接指定 basePackages,推斷出 basePackages)
Class<?>[] basePackageClasses() default {};
// 指定 Feign 的全域性配置類,如果不指定就是預設的,可以設定請求攔截、超時時間等
Class<?>[] defaultConfiguration() default {};
// 掃描指定的類,這些類如果標註了 FeignClient 註解,將會為其生成代理類注入到 spring 容器
Class<?>[] clients() default {};
}
-
basePackages 示例
@Configuration @EnableFeignClients(basePackages = { "com.dtyunxi.yundt.cube.center.scheduler.api", "com.yunxi.dg.base.center.expense.api", "com.yunxi.dg.base.commons.rpc.*", "com.yunxi.dg.base.center.report.api", "com.yunxi.dg.base.center.rule.api", "com.yunxi.dg.base.center.shop.api", "com.yunxi.dg.base.center.rebate.api", "com.yunxi.dg.base.center.customer.api" }) public class FeignClientConfig { }
-
basePackageClasses 示例
// basePackages 將會是 com.yunxi.dg.base.center.expense.api.biz @EnableFeignClients(basePackageClasses = {com.yunxi.dg.base.center.expense.api.biz.IAccountAugmentOrderApi.class})
-
defaultConfiguration 示例
// 指定一個配置類 @Configuration @EnableFeignClients(basePackageClasses = {com.yunxi.dg.base.center.expense.api.biz.IAccountAugmentOrderApi.class}, defaultConfiguration = MyFeignConfiguration.class) public class FeignClientConfig { } // 配置類程式碼 @Configuration public class MyFeignConfiguration { @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; // 設定 Feign 的日誌級別為 FULL } @Bean public Request.Options requestOptions() { return new Request.Options(5000, 10000); // 設定 Feign 的連線超時和讀取超時 } // 其他定製化配置,比如請求攔截器、錯誤解碼器等 }
-
clients 示例
@EnableFeignClients(clients = {MyFeignClient1.class, MyFeignClient2.class})
@FeignClient 註解配置項
public @interface FeignClient {
// 和 value 互為別名,標示要呼叫哪個服務,要和 nacos 上面的服務名一致
@AliasFor("name")
String value() default "";
// 當服務提供者的介面太多了,呼叫方想分為多個 FeignClient,就要指定不同的 contextId,一般不配置
String contextId() default "";
@AliasFor("value")
String name() default "";
String[] qualifiers() default {};
// 表示要呼叫的地址,優先順序高於 name,一般用於除錯,寫死一個地址(ip+埠)
String url() default "";
// 如果呼叫的介面 404,true:瀏覽器也響應 404;false:瀏覽器響應 500(看程式日誌才會知道是 404)
boolean dismiss404() default false;
// Feign配置類,可以自定義Feign的Encoder、Decoder、LogLevel、Contract
Class<?>[] configuration() default {};
// 定義容錯的處理類,當呼叫遠端介面失敗或超時時,會呼叫對應介面的容錯邏輯,fallback指定的類必須實現@FeignClient標記的介面
Class<?> fallback() default void.class;
// 工廠類,用於生成 fallback 類示例,透過這個屬性我們可以實現每個介面通用的容錯邏輯,減少重複的程式碼
Class<?> fallbackFactory() default void.class;
// 定義當前 FeignClient 訪問介面時的統一字首
// 最終的全路徑必須和服務提供方的 url 完全一致,如果這裡加了 path,服務提供方沒有這個,就會報 404
String path() default "";
boolean primary() default true;
}
超時配置
這個太複雜了,不同的場景配置不一樣
feign、openfeign、httpclient、httpclient5、ok-http、ribbon、hystrix
連線超時、讀取超時
只能看自己用的什麼版本,什麼元件