什么是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);
}复制代码

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

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

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


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @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

代码如下:

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

重写配置:

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

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

在上述代码更改了该FeignClient的重试次数,重试间隔为100ms,最大重试时间为1s,重试次数为5次。 java B2B2C 多租户电子商城系统

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

java B2B2C Springcloud电子商务平台源码 -Feign之源码解析相关推荐

  1. java B2B2C Springcloud电子商务平台源码-服务网关过滤器

    过滤器作用 我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了.但是,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都需要有一定的限制,系统并不会将所有的微服务接口 ...

  2. java B2B2C Springcloud电子商务平台源码-RabbitMQ基础概念...

    RabbitMQ是一个由erlang开发的AMQP的开源实现. 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 AMQP,即Adva ...

  3. java B2B2C Springcloud电子商务平台源码

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台.愿意了解源码的朋友直接求求交流分享技术:二一四 ...

  4. java B2B2C Springcloud电子商务平台源码-security简单使用

    security的简单原理: 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码:壹零叁八柒柒肆六二六 使用众多的拦截器对url拦截,以此来管理权限.但是这么 ...

  5. java B2B2C Springcloud电子商务平台源码------Hystrix的缓存使用

    一 介绍 在高并发的场景之下,Hystrix中提供了请求缓存的功能,可以方便地开启和使用请求缓存来优化系统,达到减轻高并发时请求线程的消耗.降低请求响应时间的效果.愿意了解源码的朋友直接求求交流分享技 ...

  6. java B2B2C Springboot电子商务平台源码-Feign 基本使用

    1. [microcloud-consumer-feign]为了可以使用到 feign 支持,需要修改 pom.xml 配置文件,引入相关依赖包:需要JAVA Spring Cloud大型企业分布式微 ...

  7. java B2B2C Springboot电子商务平台源码-Feign设计原理

    什么是Feign? 电子商务平台源码请加企鹅求求:一零三八七七四六二六.Feign 的英文表意为"假装,伪装,变形", 是一个http请求调用的轻量级框架,可以以Java接口注解的 ...

  8. Java B2B2C多用户电子商务平台SpringCloud/Boot

    用java实施的电子商务平台太少了,使用spring cloud技术构建的b2b2c电子商务平台更少,大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B ...

  9. java B2B2C Springboot电子商务平台源码-SSO单点登录之OAuth2.0登录认证

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

最新文章

  1. vue保存内容到本地_Vue两个版本区别
  2. curl获取结果乱码的解决方法之CURLOPT_ENCODING(curl/Post请求)
  3. opencv 星空_opencv各种小例子
  4. 小说的逻辑与反逻辑_毕飞宇北大演讲:“走”与“走”——小说内部的逻辑与反逻辑...
  5. C++中有关queue常用函数的用法及其注意要项
  6. Tensorflow笔记(一)
  7. Tkinter编写Mac应用(-)
  8. mysql数据库约束和默认
  9. idea破解版下载 + 最常用快捷键记录
  10. Netcore磊科NW336驱动Win7下载 NW336 150M无线USB网卡驱动
  11. 阿里语音识别看这一篇就够了
  12. STM32战舰USB转串口驱动
  13. Ue4导入视频黑屏原因
  14. 捐一个亿的是加多宝,不是王老吉!只喝加多宝,不喝王老吉!
  15. OSPF笔记(二):OSPF邻居与邻接、DR与BDR选举
  16. java石头剪刀布思路_石头剪刀布Java实现
  17. 【JAVA】网页版登录注册系统
  18. wyAPP苹果APP 营销
  19. 计算机专业学微积分有什么用,学微积分有什么用啊?
  20. Arcgis创建新色带

热门文章

  1. [转载] Python学习笔记 String类型常用方法
  2. 【现代软件工程】第一次作业——词频统计
  3. 定制属于自己的自动化安装的linux系统镜像
  4. Java零基础系列001——第一个程序
  5. Windows服务器常用命令
  6. (五)基于matchTemplate的图像区域匹配
  7. LabView学习笔记(五):数据类型综合实验
  8. MCPTAM标定部分 运行结果
  9. vb子程序未定义怎么改怎么办_vb中总提示子程序或函数未定义
  10. python调试方法logging_python中logging使用方法