前言
微服务项目里 OpenFeign 是最常用的声明式 HTTP 客户端,但 @FeignClient 的属性含义很多人只停留在 value 上。这篇整理注解的全属性解读,以及一个常见的坑:多个 FeignClient 指向同一个服务时的 bean 重名冲突。
一、@FeignClient 全属性解读
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {
/**
* 1、value 与 name 互为别名,两者二选一即可
* 2、当 contextId 没有值的时候,会默认获取(value/name)的值
* 3、当未指定 url 请求地址的时候,最终会通过 ribbon-loadbalancer 工具,
* 从注册中心选取 service-id 等于 value 的服务作为请求地址
*/
@AliasFor("name")
String value() default "";
/**
* serviceId 已作废,其目的与 value 一致。如果设置了 serviceId,
* 则 value/name 皆以 serviceId 为准
*/
@Deprecated
String serviceId() default "";
/**
* 1、当 contextId 没有值的时候,会默认获取(value/name)的值
* 2、当 qualifier 没有值的时候,会将 '${contextId}FeignClient' 作为
* feign 的 bean 组件别名
*/
String contextId() default "";
/** 同 value,二选一 */
@AliasFor("value")
String name() default "";
/**
* feign 的 bean 组件别名,拥有最高优先级;
* 当 qualifier 为空时,取 '${contextId}FeignClient' 作为 bean 的名称
*/
String qualifier() default "";
/**
* 1、设置 url 以后,后续发起 http 调用时,直接读取该地址作为请求目标;
* 2、未设置 url 时,借助 ribbon-loadbalancer 组件,根据 (value/name)
* 从注册中心的服务列表中选中 service-id 匹配的目标服务
*/
String url() default "";
boolean decode404() default false;
Class<?>[] configuration() default {};
Class<?>[] fallback() default void.class;
Class<?>[] fallbackFactory() default void.class;
/**
* 目标服务器对应的资源 uri(FeignClient 下所有方法相同的 path 前缀)
*/
String path() default "";
boolean primary() default true;
}
|
属性速查:
……
阅读全文