![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring Cloud Open Feign
文章平均质量分 88
Spring Cloud Open Feign 系列
云烟成雨TD
一个追求有道有术的非典型程序员
展开
-
Spring Cloud Open Feign系列【23】OAuth2FeignRequestInterceptor、BasicAuthRequestInterceptor拦截器解析
有道无术,术尚可求,有术无道,止于术。资料整理来自网络文章目录BasicAuthRequestInterceptorBasic 认证使用案例BasicAuthRequestInterceptorBasicAuthRequestInterceptor翻译过来就是 Basic 认证请求拦截器。Basic 认证Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。比如Security 就.原创 2022-04-29 14:38:12 · 2674 阅读 · 0 评论 -
Spring Cloud Open Feign系列【22】RequestInterceptor获取不到HttpServletRequest问题解决方案
文章目录问题场景原因分析RequestContextHolderHystrix隔离策略解决方案方案1 修改隔离策略为SEMAPHORE方案2 自定义隔离策略问题场景在使用Hystrix的情况下,使用RequestInterceptor获取Oauth2 令牌并传递到下游服务时,发现从RequestContextHolder中获取到的HttpServletRequest为NULL。@Componentpublic class AAOauth2TokenRequestInterceptor impleme原创 2022-01-10 13:46:18 · 4130 阅读 · 1 评论 -
Spring Cloud Open Feign系列【21】Hystrix基本工作原理
文章目录前言工作流程图1.构造一个HystrixCommand或HystrixObservableCommand对象2.执行命令3. 响应是否被缓存?4. 断路器是否开启?5. 线程池/信号量是否已满?6.HystrixObservableCommand.construct()或HystrixCommand.run()7.计算断路器健康状态8. 获取降级9. 返回成功响应断路器隔离线程和线程池线程池的好处线程池的缺点线程成本信号量请求折叠请求缓存前言内容来自Hystrix工作流程图下图显示了通过 H原创 2022-01-10 11:16:39 · 760 阅读 · 0 评论 -
Spring Cloud Open Feign系列【20】GET/POST请求使用案例及注意事项
文章目录前言HTTP 请求方式GET请求案例1. 没有参数2. 多个基础类型参数4. 集合数据参数5. 单个对象参数6. 多个对象参数7. 下载文件POST 请求案例1. 传递单个对象参数2. 传递多个对象参数3. 上传文件前言在之前,我们分析了Feign 的基本原理及相关源码,实际在使用时还是需要额外注意Feign 调用接口的编写,需要安排其规定的格式,不然那很容易出错,下面就总结一下常用的GET/POST请求时需要注意的问题。HTTP 请求方式GET和POST是HTTP请求的两种基本方法,最直原创 2022-01-06 18:15:53 · 5071 阅读 · 1 评论 -
Spring Cloud Open Feign系列【19】Feign接口继承特性
文章目录前言问题Feign接口继承特性改造案例1. 定义统一接口前言问题在编写Feign 接口时,我们需要写注解来声明请求的路径、参数。而在被调用方,这些是已经声明好了的,重复在写一次,很容易出错,而且也有冗余。Feign接口继承特性在之前分析加载方法元数据的文档中,有提到会获取父接口中的注解信息,也就是说父类接口的注解信息也会被加载。那么通过这种方式,我们可以定义好一个Spring MVC接口,让服务提供方实现这个接口,编写业务逻辑,让调用方编写Feign 接口的时候,直接继承就可以了,原创 2022-01-06 09:40:57 · 2090 阅读 · 1 评论 -
Spring Cloud Open Feign系列【18】RequestTemplate(请求模板)源码分析
文章目录前言核心类RequestTemplate源码分析1. 进入工厂类2. 请求参数为对象【POST】3. 请求参数为对象【GET】4. @RequestParam 注解【GET】5. 转换为Request前言紧接上文,之前分析了方法处理器是如何进行加载及执行的,其中提到了,在调用Feign 接口方法时,会根据方法参数创建请求模板(RequestTemplate),接下来我们分析下这个是如何加载及执行的。核心类RequestTemplateFeign 中存在各种各样的模板类,RequestT原创 2022-01-05 16:51:25 · 13068 阅读 · 1 评论 -
Spring Cloud Open Feign系列【17】MethodHandler方法处理器源码分析
文章目录前言MethodHandler接口流程分析1. 初始化2. 方法执行前言在之前的案例中,我们分析了注解扫描,加载Feign 接口信息为FactoryBean,然后通过动态代理加载到IOC中,在动态代理的newInstance过程中,会使用契约Contract创建方法元数据(MethodMetadata),然后通过这些元数据为每个执行方法加载MethodHandler,接下来就具体分析下MethodHandler。MethodHandler接口MethodHandler接口非常简单,只有一原创 2022-01-05 11:50:15 · 1228 阅读 · 1 评论 -
Spring Cloud Open Feign系列【16】Contract 创建方法元数据(MethodMetadata)源码分析
文章目录前言MethodMetadataContract 接口及其实现类加载流程源码解析1. 进入动态代理2. 进入解析前言在之前,我们了解到Feign 基于接口声明,生成执行请求的动态代理对象,那么究竟是如何将接口上的注解等信息,解析的呢?这里就必须了解Feign 中非常重要的一个接口Contract。Contract意为契约,实际就是Feign 中的接口解析器,会解析接口方法上的注解为元数据,以此来创建请求模板及方法执行器。MethodMetadataMethodMetadata意为方法元数据原创 2022-01-04 17:43:10 · 1612 阅读 · 0 评论 -
Spring Cloud Open Feign系列【15】Feign动态代理源码分析
文章目录前言核心类Target接口ClientFeignContextFeignTargeter流程分析1. 获取对象2. 创建上下文、构建者3. 创建Target4. 生成代理对象总结前言在之前分析了@EnableFeignClients及@FeignClient 是如何进行扫描及读取Feign 接口信息的,最后注解上的信息是被加载为BeanDefinition放入了BeanDefinitionRegistry中,接下来就是加载为Bean 对象了,依据下图(来自于百度)Feign 基本原理,分析下Fe原创 2022-01-04 14:05:20 · 1360 阅读 · 0 评论 -
Spring Cloud Open Feign系列【14】@FeignClient注解源码分析
文章目录前言作用属性配置流程解析1. 获取客户端名称2. 获取configuration3. 注册客户端前言在上篇文档中@EnableFeignClients注解,扫描@FeignClient注解表示的接口,并将加载到容器中,接下来分析下@FeignClient注解配置项及加载流程。作用标记接口为Feign 客户端,Feign 启动会扫描当前接口及注解属性,加载到容器中,执行时,通过IOC中当前注解对应的FactoryBean对象,创建动态代理对象,然后去执行请求流程属性配置@Target({E原创 2021-12-31 18:03:09 · 1477 阅读 · 0 评论 -
Spring Cloud Open Feign系列【13】@EnableFeignClients注解源码分析
文章目录前言作用配置属性FeignClientsRegistrar总结前言在Cloud 中使用@EnableFeignClients启用Feign客户端,接下来分析下这个注解的基本原理。作用@EnableFeignClients注解会扫描包路径下的@FeignClient注解定义的接口,并注册到IOC容器中。配置属性配置属性主要是配置扫描路径:@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})@Documented原创 2021-12-31 16:55:18 · 2042 阅读 · 0 评论 -
Spring Cloud Open Feign系列【12】Feign 整合Hystrix实现熔断降级
文章目录入门概念Hystrix 简介Hystrix 状态Hystrix 有什么用?入门案例方式1 直接实现Feign 客户端接口方式2 实现FallbackFactory 接口入门概念服务雪崩效应及容错方案可以看下文档,了解下熔断降级的相关概念和重要性。Hystrix 简介githubHystrix 状态Hystrix 不再处于积极开发阶段,目前处于维护模式。Hystrix(版本 1.5.18)足够稳定,可以满足 Netflix 对我们现有应用程序的需求。可以从版本发布看到,自从2018原创 2021-12-31 13:44:55 · 1424 阅读 · 0 评论 -
Spring Cloud Open Feign系列【12】Feign请求拦截器RequestInterceptor源码分析及使用案例
文章目录需求场景解决方案源码分析FeignClient 注解中配置请求拦截器需求场景在使用Spring Security Oauth2时,通过消息头中的Authorization Bearer toeknXXXX对令牌进行校验,如果失败,是会拒绝访问的。那么在使用Feign进行调用时,就会出现问题,因为Feign发送请求时,是没有传递认证消息头的。解决方案实现RequestInterceptor,获取原本请求中的认证消息头,然后添加到请求模板中。@Componentpublic class O原创 2021-12-31 11:00:14 · 2543 阅读 · 0 评论 -
Spring Cloud Open Feign系列【11】Feign 编码解码器Encoder和Decoder源码分析
文章目录概述接口及相关实现类Encoder 接口Decoder接口执行流程源码分析1. 项目结构改造2. 编码器流程概述在现实世界,编解码的概念就存在了。编码是信息从一种形式或格式转换为另一种形式的过程,解码,是编码的逆过程。在电子计算机、电视、遥控和通讯等方面广泛使用。在程序中,也是广泛使用了这个概念,比如Base64 编码解码。在Feign中,也存在编解码的概念:Encoder :编码器,作用于请求阶段,将对象编码到请求体中。Decoder:解码器,作用域响应阶段,解析HTTP 响应消息。原创 2021-12-31 10:19:18 · 18829 阅读 · 2 评论 -
Spring Cloud Open Feign系列【10】Feign 、 Ribbon 重试机制源码分析
文章目录前言Feign 重试机制Retryer接口Default 类Feign 重试机制源码分析某些疑问多次请求,他们的重试间隔时间,给个例子?其他异常,会被重试吗?前言重试机制: 在发生异常时,重新尝试请求,多次还是失败时,才会抛出异常。**应用场景:**可能由于网络抖动出现第一次调用失败,尝试几次就可以恢复正常。Spring提供的声明式的重试类库Spring-Retry。Feign 重试机制Feign Core 也提供了自己的重试机制,基于Retryer接口。Retryer接口Retr原创 2021-12-30 13:53:42 · 1701 阅读 · 1 评论 -
Spring Cloud Open Feign系列【9】Fegin 开启日志打印、Gzip压缩
文章目录日志打印Logger 日志类使用案例Gzip压缩Gzip概述HTTP协议支持压缩说明Tomcat 使用Gzip 压缩Fegin 使用Gzip 压缩日志打印Logger 日志类Feign 可以开启请求响应详细日志打印,方便我们调试程序,在构建客户端、方法执行器的时候,都可以看到设置了日志类及日志级别。该Logger是Feign 自己提供的类,该日志类,提供了打印请求日志、响应日志、IO异常、重试日志等方法。该类还提供了一个日志级别: public static enum Leve原创 2021-12-29 16:57:45 · 1236 阅读 · 0 评论 -
Spring Cloud Open Feign系列【8】Feign超时配置详解及源码分析
文章目录前言官网案例连接超时和读取超时配置前言在之前的文档中,介绍Ribbion原理及基本使用,接下来介绍下其他的一些配置使用。官网案例在官网入门案例中,有一个客户端的配置文件,这里面就包含了Ribbion 的常用配置项。# 同一服务上的最大重试次数(不包括第一次重试))sample-client.ribbon.MaxAutoRetries=1# 要重试的下一台服务的最大数量(不包括第一台服务)sample-client.ribbon.MaxAutoRetriesNextServer=1原创 2021-12-29 13:09:32 · 2416 阅读 · 0 评论 -
Spring Cloud Open Feign系列【7】Ribbion负载均衡策略源码分析
文章目录前言IRule 接口RandomRule(随机)RoundRobinRule(轮询)WeightedResponseTimeRule(响应时间权重轮询)RetryRule(重试)BestAvailableRule(最小并发)AvailabilityFilteringRule(可用断言过滤器)ZoneAvoidanceRule (可用性其性能断言)负载均衡策略案例使用自带的策略自定义策略前言在之前Ribbon 负载均衡算法流程的文档中,我们分析到在获取服务时,Ribbion 会使用负载均衡规则类去原创 2021-12-28 17:54:47 · 993 阅读 · 0 评论 -
Spring Cloud Open Feign系列【6】Ribbion配置类源码分析
文章目录Ribbon 自动配置类RibbonAutoConfigurationRibbonClientConfigurationRibbon 自动配置类RibbonAutoConfigurationRibbonClientConfiguration基于Spring Boot 提供的自动配置功能,Ribbon 自动配置的类在org.springframework.cloud.netflix.ribbon包的RibbonClientConfiguration类中。该类使用@Import导入了其他配置类原创 2021-12-28 13:06:37 · 686 阅读 · 0 评论 -
Spring Cloud Open Feign系列【5】集成Ribbion实现客户端负载均衡
文章目录负载均衡服务端负载均衡客户端负载均衡负载均衡算法1、轮询法2、随机法3、源地址哈希法4、加权轮询法5、加权随机法6、最小连接数法Ribbion简介停止维护声明使用案例1. 修改版本2.测试3. Ribbon 执行流程分析4. Ribbon 负载均衡算法流程负载均衡负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。在分布式架构中,某个服务后台肯定存在多个副本,这个时候就需要负载均衡组件,将流量分摊到这些副本中。可以通过硬件或软件原创 2021-12-27 23:00:38 · 901 阅读 · 0 评论 -
Spring Cloud Open Feign系列【4】集成OkHttp及连接池配置详解
文章目录Feign 如何发送请求Client 接口Default 类Proxied 类Feign 对其他HTTP 客户端框架的支持支持项HTTP 连接池Feign集成Ok Http1. 添加okhttp 依赖2. 添加配置3. 连接池配置4. 简单测试Feign 如何发送请求在之前文档中,可以了解到,Feign 是集成了其他HTTP 客户端框架进行请求发送。实际发送请求是由Feign 中的Client接口实现类去处理的,默认使用的是Defalut 类,该类使用的是HttpURLConnection。原创 2021-12-27 14:59:00 · 14594 阅读 · 3 评论 -
Spring Cloud Open Feign系列【3】Spring Cloud 2020.x 集成Open Feign
文章目录前言(微服务架构下需要解决的问题)后台服务之间如何通信同步调用异步消息调用如此多的服务,如何实现?基于客户端的服务注册与发现基于服务端的服务注册与发现服务挂了,如何解决?Cloud 2020.x 集成Open Feign1. 创建项目2. 引入依赖3. 编写测试代码4. 测试参考文档前言(微服务架构下需要解决的问题)后台服务之间如何通信在之前 《Spring Cloud Gateway系列》中,我们介绍了微服务架构下,前后端分离,客户端通过API 网关来和后台应用进行通信,网关提供统一服务入口原创 2021-12-27 11:32:48 · 1103 阅读 · 0 评论 -
Spring Cloud Open Feign系列【2】Feign原生注解
文章目录注解介绍使用案例@RequestLine概述案例@Param概述@Headers概述案例@QueryMap概述案例@HeaderMap概述案例@Body概述案例注解介绍之前介绍过,Feign 是通过接口+注解的方式声明一个HTTP 请求。Feign 注解定义了接口和底层客户端应之间该如何工作的关系。Feign 的默认定义了以下注解:注解作用位置用法@RequestLine方法为请求定义HttpMethod和UriTemplate。 花括号{expression}中的原创 2021-12-24 14:56:29 · 2811 阅读 · 0 评论 -
Spring Cloud Open Feign系列【1】Feign的核心概念及入门案例
文章目录1. 什么是Feign2. 常用HTTP客户端HttpURLConnectionHttpClientOkHttpFeign1. 什么是FeignFeign是—个声明式、模板化的HTTP客户端,GitHub源码地址。在HTTP协议中,发送请求的一方就是HTTP 客户端,在JAVA 中,有很多HTTP 客户端框架。2. 常用HTTP客户端HttpURLConnectionHttpURLConnection是在JDK的java.net包中提供的用于HTTP协议访问的基本功能的类,但是由于使用步原创 2021-12-24 11:19:16 · 1315 阅读 · 0 评论