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

本文共 3102 字,大约阅读时间需要 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次。

转载于:https://juejin.im/post/5cb91e0a6fb9a068646c1313

你可能感兴趣的文章
jQuery 遍历
查看>>
开源的丰富的flutter Icons库
查看>>
内存管理Release和Retain实现原理
查看>>
(JVM 笔记)Java虚拟机:Java 内存管理
查看>>
一分钟读懂兼容报告——行业对标数据助你定位产品状况
查看>>
Axure RP 7.0从入门到精通 Web+APP产品经理原型设计 彩色pdf扫描版
查看>>
点击H5页面的时候出现阴影
查看>>
(五十)java版spring cloud+spring boot 社交电子商务平台-API网关服务
查看>>
Python从零开始系列连载(14)——Python程序的基本控制流程(中)
查看>>
js实现一个按照权重抽奖函数
查看>>
(二十四)java版spring cloud+spring boot 社交电子商务平台-eureka 原理分析
查看>>
你学习python多久了呢?目前有在了解哪方面的技术呢?
查看>>
292 Nim Game
查看>>
ConstraintLayout 平分布局
查看>>
java版spring cloud+spring boot+redis多租户社交电子商务平台(三)SpringBoot用JdbcTemplates访问Mysql...
查看>>
极光推送集成
查看>>
git部分基本命令
查看>>
292 Nim Game
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)
查看>>
Java B2B2C多用户商城 springcloud架构-Stream分区支持
查看>>