首先看一下@FeignClient註解的源碼: 可以看出@FeignClient註解被@Target(ElementType.TYPE)修飾,表示@FeignClient註解的作用目標在介面上。 針對其常用屬性做如下歸納: String name():指定FeignClient的名稱,如果項目使用了 ...
首先看一下@FeignClient註解的源碼:
package org.springframework.cloud.openfeign; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FeignClient { @AliasFor("name") String value() default ""; /** @deprecated */ @Deprecated String serviceId() default ""; @AliasFor("value") String name() default ""; String qualifier() default ""; String url() default ""; boolean decode404() default false; Class<?>[] configuration() default {}; Class<?> fallback() default void.class; Class<?> fallbackFactory() default void.class; String path() default ""; boolean primary() default true; }
可以看出@FeignClient註解被@Target(ElementType.TYPE)修飾,表示@FeignClient註解的作用目標在介面上。
針對其常用屬性做如下歸納:
- String name():指定FeignClient的名稱,如果項目使用了ribbon做負載均衡,name屬性會作為微服務的名稱,用於服務發現。
- String url():url一般用於調試,可以指定FeignClient註解調用的地址。
- boolean decode404():當發生404錯誤時,如果該欄位為true,會調用decoder進行解碼,否則拋出FeignException異常,預設是false。
- Class<?> configuration():Feign的配置類,可以自定義Feign的Encoder、Decoder、LogLevel、Contract。
- Class<?> fallback():定義容錯的處理類,當遠程調用超時或者遠程介面失敗,會調用對應介面的容錯邏輯,fallback指定的類必須實現@FeignClient標記的介面。
- Class<?> fallbackFactory():工廠類,用於生成fallback類實例,通過這個屬性我們可以實現每個介面通用的容錯邏輯,減少重覆的代碼。
- String path():定義當前FeignClient的統一首碼路徑。