菜鸟笔记
提升您的技术认知

feignclient配置-ag真人游戏

feignclient详解

首先查看@feignclient注解的源码:

@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
public @interface feignclient {
  
	@aliasfor("name")
	string value() default "";
	@deprecated
	string serviceid() default "";
	@aliasfor("value")
	string name() default "";
	
	string qualifier() default "";
	
	string  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注解的作用目标在接口上。

@retention(retentionpolicy.runtime)注解表明该注解会在class字节码文件中存在,在运行时可以通过反射获取到。

@documented表示该注解将被包含在javadoc中。

@feignclient注解用于创建声明式api接口,该接口是restful风格的。feign被设计成插拔式的,可以注入其他组件和feign一起使用。最典型的是如果ribbon可用,feign会和ribbon相结合进行负载均衡。

在代码中,value()和name()一样,是被调用的服务的serviceid。直接填写硬编码的url地址。

decode404()即404是被解码,还是抛异常。

configuration()指明feignclient的配置类,默认的配置类为feignclientsconfiguration类,在缺省的情况下,这个类注入了默认的decoder、encoder和contract等配置的bean。

fallback()为配置熔断器的处理类。

feignclient的配置

feign client默认的配置类为feignclientsconfiguration, 这个类在spring-cloud-nettlix-core的jar包下。

打开这个类,可以发现这个类注入了很多feign相关的配置bean,包括feignretryer、feignl oggerfactory和formattingconversionservice 等。

另外,decoder、 encoder 和contract这3个类在没有bean被注入的情况下,会自动注入默认配置的bean,即responseentitydecoder、springencoder和springmvccontract。默认注入的配置如下。

  • decoder feigndecoder:responseentitydecoder
  • decoder feignencoder:springencoder
  • logger feignlogger:slf4jlogger
  • contract feigncontract:springmvccontract
  • feign.builder feignbuilder: hystrixfeign.builder

feignclientsconfiguration的配置类部分代码如下,@conditionalonmissingbean注解表示如果没有注入该类的bean就会默认注入一个bean:

重写feignclientsconfiguration类中的bean,覆盖掉默认的配置bean,从而达到自定义配置的目的。例如feign默认的配置在请求失败后,重试次数为0,即不重试(retryer.neverretry)。现在希望在请求失败后能够重试,这时需要写一个配置feignconfig 类,在该类中注入retryer的bean,覆盖掉默认的retryer的bean,并将feignconfig指定为feignclient的配置类。feignconfig 类的代码如下:

在上面的代码中,通过覆盖了默认的retryer的bean,更改了该feignclient的请求失败重试策略,重试间隔为100毫秒,最大重试时间为1秒,重试次数为5次。

网站地图