博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java B2B2C Springcloud电子商务平台源码 -Feign之源码解析
阅读量:6946 次
发布时间:2019-06-27

本文共 3050 字,大约阅读时间需要 10 分钟。

什么是Feign

Feign是受到Retrofit,JAXRS-2.0和WebSocket的影响,它是一个jav的到http客户端绑定的开源项目。 Feign的主要目标是将Java Http 客户端变得简单。需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六

写一个Feign

现在来简单的实现一个Feign客户端,首先通过@FeignClient,客户端,其中value为调用其他服务的名称,FeignConfig.class为FeignClient的配置文件,代码如下:

@FeignClient(value = "service-hi",configuration = FeignConfig.class)public interface SchedualServiceHi {    @GetMapping(value = "/hi")    String sayHiFromClientOne(@RequestParam(value = "name") String name);}复制代码

其自定义配置文件如下,当然也可以不写配置文件,用默认的即可:

@Configurationpublic class FeignConfig {    @Bean    public Retryer feignRetryer() {        return new Retryer.Default(100, SECONDS.toMillis(1), 5);    }    }复制代码

查看FeignClient注解的源码,其代码如下:

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface FeignClient {@AliasFor("name")String value() default "";	@AliasFor("value")String name() default "";	@AliasFor("value")String name() 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注解的作用目标在接口上;

@Retention(RetentionPolicy.RUNTIME),注解会在class字节码文件中存在,在运行时可以通过反射获取到;@Documented表示该注解将被包含在javadoc中。

feign 用于声明具有该接口的REST客户端的接口的注释应该是创建(例如用于自动连接到另一个组件。 如果功能区可用,那将是 用于负载平衡后端请求,并且可以配置负载平衡器 使用与伪装客户端相同名称(即值)@RibbonClient 。

其中value()和name()一样,是被调用的 service的名称。

url(),直接填写硬编码的url,decode404()即404是否被解码,还是抛异常;configuration(),标明FeignClient的配置类,默认的配置类为FeignClientsConfiguration类,可以覆盖Decoder、Encoder和Contract等信息,进行自定义配置。fallback(),填写熔断器的信息类。

FeignClient的配置

默认的配置类为FeignClientsConfiguration,这个类在spring-cloud-netflix-core的jar包下,打开这个类,可以发现它是一个配置类,注入了很多的相关配置的bean,包括feignRetryer、FeignLoggerFactory、FormattingConversionService等,其中还包括了Decoder、Encoder、Contract,如果这三个bean在没有注入的情况下,会自动注入默认的配置。

Decoder feignDecoder: ResponseEntityDecoder(这是对SpringDecoder的封装)

Encoder feignEncoder: SpringEncoder

Logger feignLogger: Slf4jLogger

Contract feignContract: SpringMvcContract

Feign.Builder feignBuilder: HystrixFeign.Builder

代码如下:

@Configurationpublic class FeignClientsConfiguration {...//省略代码@Bean	@ConditionalOnMissingBean	public Decoder feignDecoder() {		return new ResponseEntityDecoder(new SpringDecoder(this.messageConverters));	}	@Bean	@ConditionalOnMissingBean	public Encoder feignEncoder() {		return new SpringEncoder(this.messageConverters);	}	@Bean	@ConditionalOnMissingBean	public Contract feignContract(ConversionService feignConversionService) {		return new SpringMvcContract(this.parameterProcessors, feignConversionService);	}...//省略代码}复制代码

重写配置:

你可以重写FeignClientsConfiguration中的bean,从而达到自定义配置的目的,比如FeignClientsConfiguration的默认重试次数为Retryer.NEVER_RETRY,即不重试,那么希望做到重写,写个配置文件,注入feignRetryer的bean,代码如下:

@Configurationpublic class FeignConfig {   @Bean   public Retryer feignRetryer() {       return new Retryer.Default(100, SECONDS.toMillis(1), 5);   }}复制代码

在上述代码更改了该FeignClient的重试次数,重试间隔为100ms,最大重试时间为1s,重试次数为5次。

转载地址:http://nmonl.baihongyu.com/

你可能感兴趣的文章
行为型模式之六:责任链模式
查看>>
C#执行DOS命令(CMD命令)
查看>>
RB,CCR设备开启FastTrack
查看>>
区域性名称和标识
查看>>
Live Migrate 操作 - 每天5分钟玩转 OpenStack(42)
查看>>
java.sql.SQLException: Before start of result set
查看>>
word2007去掉文字当中的白色背景
查看>>
暑假转瞬即逝
查看>>
vi 图片上传封装函数
查看>>
php 文件上传实例代码
查看>>
我的友情链接
查看>>
www.mscode.cc:autohal.exe 应用程序错误
查看>>
出现 SSD 故障时 VSAN 群集会发生什么?
查看>>
容易马虎的地方!!!!
查看>>
python+gtk 开发用的在线帮助文档
查看>>
C++ 几种智能指针的简单实现
查看>>
awk高级编程
查看>>
Windows Message ID 常量列表 大全
查看>>
uglifyjs使用入门
查看>>
Maven 错误笔记
查看>>