首先看一下@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的统一前缀路径。
feign支持对特定名称的feign细粒化配置,也支持针对整个项目做全局配置。