主要用于客户端服务发现,实际就是调用其他的服务。

FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上

源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {
	@AliasFor("name")
	String value() default "";
	@Deprecated
	String serviceId() default "";
	String contextId() 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;
}

声明接口之后,在代码中通过@Resource等注入之后即可使用。@FeignClient标签的常用属性下面将逐一详解。

1,name、value和serviceId

从源码可以得知,name是value的别名,value也是name的别名。两者的作用是一致的,name指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

其中,serviceId和value的作用一样,用于指定服务ID,已经废弃。

2,url

url属性一般用于调试程序,允许我们手动指定@FeignClient调用的地址。

3,path

path属性定义当前FeignClient的统一前缀。这样方便在该FeignClient中的@RequestMapping中书写value值。假如存在一系列的用户管理服务,

如下:

  • /app/service/aDong/get

  • /app/service/aDong/insert

  • /app/service/aDong/update

  • /app/service/aDong/delete

我们次都在@RequestMapping注解中编写全服务名称,是不是有点啰嗦。因此可以设置FeignClient的path路径为“/app/service/aDong”,简化@RequestMapping的编写。

4,primary

是否将伪代理标记为主Bean,默认为true

ps:原理解析,后续补发~~~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐