
feign
文章平均质量分 95
通过这一系列文章,帮助您快速上手 Feign 的基本功能,同时具备解决复杂微服务通信需求的能力。无论是初学者,还是想深入 Feign 核心的技术达人,都能通过本专栏获得丰富的知识储备和实践能力。
uncleqiao
1. 练习时长8年的java程序员
2. 执着于技术探索, 有一套自己的技术体系
3. 对spring、rocketmq、netty等都有一定的理解。
4. 坚持保持良好的技术热度, 探索适当的技术深度, 出优质的技术博文
5. 个人公众号:行云代码 欢迎关注
展开
-
19.springcloud_openfeign之案例
前面已经介绍完了feign的基本功能以及springcloud_openfeign的扩展功能, 本节我们将介绍springcloud_openfeign的使用案例feign框架本身较为简单, 但是扩展点是非常多的, 使用者可以几乎对每一个功能点做定制化;利用springcloud的父子容器特性将每个feign接口(客户端)隔离成单独的子容器,有点类似类加载器的隔离;这里不同于spring的作用域的隔离机制写通用并且扩展性强的代码是非常重要的, 同时也需要一定的技术功底。原创 2024-12-30 00:00:16 · 853 阅读 · 0 评论 -
18.springcloud_openfeign之扩展组件二
通过前面的学习, 我们知道了springcloud_openfeign的注解, 使用@Import注解引入了对象, FeignClientsRegistrar是个类型的对象在registerBeanDefinitions方法中会将和封装成注入到容器中自动装配引入了类, 它将注入到容器中的注入到了创建的对象中, 而FeignClientFactory是springcloud的父子容器工厂, 它会将注入的对象按照容器名称添加到不容的子容器中(**dafult.**开头的会注册到所有子容器中),并且会将。原创 2024-12-27 15:14:57 · 1209 阅读 · 0 评论 -
17.springcloud_openfeign之扩展组件一
前面介绍了springcloud_openfeign可以从父子容器中获取对应的组件从而构建对象, 现在的企业级开发中, 一般我们都使用的springboot, 而springboot是约定大于配置的, 那么它提供的一套默认配置是什么呢, 本节我们就来认识一下。约定大于配置(Convention Over Configuration) 是 Spring Boot 的核心设计理念之一,它的主要目的是减少开发者的配置负担,让开发者专注于业务逻辑的实现,而非繁杂的配置。基本含义约定大于配置(Convention O原创 2024-12-20 00:14:30 · 858 阅读 · 0 评论 -
16.springcloud_openfeign之父子容器
在前面springcloud_openfeign的文章中了解到在扫描到满足条件的feign接口后会生成并注入到spring上下文容器, 并且在中构建时会从父子容器中获取相关的组件设置给它, 那么注入到容器中时怎么选择容器, 以及使用时是怎么从容器中获取的呢??, 本节我们就来了解一下springcloud中的父子容器, 以及springcloud_openfeign是怎么使用父子容器的。spring的容器基对象默认支持父子容器结构, 通过getParent方法获取父容器对象。在它的一级抽象实现类。原创 2024-12-17 00:44:54 · 938 阅读 · 0 评论 -
15.springcloud_openfeign之FeignClientFactoryBean
在上一篇中我们介绍了通过注解扫描并注册每个标识的接口对应的到spring容器中, 本节我们来了解一下这个类的具体内容。本节主要介绍了springcloud_openfeign如何根据注解和以及父子容器来构建Feign.Builder对象, 并处理Target需要的url, 最后通过Feign.Builder#target构建feign接口的代理对象。本文没有具体介绍其中父子容器的相关细节, 以及配置的一些具体内容, 这些将会在后面的文章中介绍到通过@Import注解给spring容器注入了。原创 2024-12-13 01:38:01 · 732 阅读 · 0 评论 -
14.springcloud_openfeign之注入FeignClientFactoryBean到spring
在目前这个spring大行其道的环境下, 一个优秀的框架除了本身质量过硬之外, 都会向spring靠拢, 要不就是spring纳入麾下主动集成, 要不就是自己实现和spring的整合, feign框架就是spring主动集成的。框架地址版本约定。原创 2024-12-10 03:45:02 · 1230 阅读 · 0 评论 -
13.原始功能案例使用篇
前面已经介绍完了feign的整个原生框架的代码, 本节将给大家带来原生feign框架的使用细节。原创 2024-12-04 22:32:35 · 975 阅读 · 0 评论 -
12.异步请求AsynchronousMethodHandler
feign异步请求有单独的入口类AsyncFeign, 它使用重写了实际请求, 处理响应等部分使用者自定义线程池替换默认的feign的异步模块基本上全部由实现的, 大家可以多花点时间去了解一下juc下这个使用频次很高的工具类。原创 2024-12-02 23:54:38 · 847 阅读 · 0 评论 -
11.feign对logger的支持
优秀的框架少不了在关键部位打印一些日志供使用人员排查问题。feign框架在执行请求前后都埋点了打印日志的代码, 当用户设置不同的日志等级会打印不同阶段的日志, 同时允许使用者自定义日志级别和日志框架;feign默认的日志实现是NoOpLogger, 也就是不打印日志feign默认的日志级别是, 也就是不打印日志feign框架默认自定义了一套日志等级, 分以下几个级别NONE, 不打印日志BASIC, 记录请求方法、URL、响应状态码和执行时间HEADERS。原创 2024-12-02 11:14:17 · 710 阅读 · 0 评论 -
10.请求拦截和响应拦截
优秀的设计总是少不了丰富的扩展点, 比如spring可以自动装配, aop扩展, web模块也有拦截器, 甚至对servlet的过滤器都有封装;再比如netty、doubbo等等都支持在数据流入流出都允许用户自定义扩展点实现定制化处理, 咱们的feign框架也同样如此, 在可以定制化组件的同时, 也允许我们对发起请求之前和接受请求之后根据扩展点实现个性化的处理。请求拦截器需要实现接口, 它在真正使用客户端执行调用前执行, 可以用它来处理请求头, 打印日志啥的。原创 2024-12-01 14:29:03 · 1363 阅读 · 0 评论 -
9.编解码器
对于参数, feign默认只支持String类型和字节数组byte[], feign默认是不支持传递自定义java bean对象的, 但是feign允许我们对参数进行自定义编解码jacksonfeign默认提供了对jackson的扩展包gav如下原创 2024-11-30 13:38:43 · 1100 阅读 · 0 评论 -
4.MethodMetadata、RequestTemplate等模板
在contracts解析接口一文中有介绍过通过方法将目标接口类解析成对象, 从类名可以看出它是方法元数据, 其实可以看做是目标调用方法的模板, 与spring中的, mybatis中的功能类似。feign框架在启动的时候会指定Contracts类型,Contracts会添加注解解析器, 来约定如何解析一些注解(包括类,方法,参数中的)然后使用Contracts解析目标接口, 生成一个代表方法元数据的对象作为方法解析后的元数据对象, 它包含了如下重要属性, 等其它属性…方法唯一标识。原创 2024-11-29 16:34:42 · 1307 阅读 · 0 评论 -
8.Feign与ReflectiveFeign
这里我们学习一下这种抽象类的设计意图/*** 子类实例*/BaseBuilder设计成了抽象一个父类, 它希望子类以链式调用的方式设置一些属性值所以要借助B thisB举个例子链式调用这里是先调用父类的name方法, 然后需要强转到子类, 再调用子类的gender方法;那如果我的调用顺序是 parent.name -> child.gender -> parent.age -> child.address呢, 那么调用链将会是如下样子。原创 2024-11-26 23:54:14 · 863 阅读 · 0 评论 -
7.同步请求SynchronousMethodHandler
是同步请求的核心类, 与内聚在同一个类中, 实现的接口也是都内聚在和上实现接口的invoke方法, 依赖组件构建请求模板并填充参数通过依赖的Client组件进行接口请求, 在请求前会先执行请求拦截器, 并对http请求的url进行@QueryMap参数的填充通过依赖的组件处理返回后的结果, 用户可以在的响应处理中添加额外的责任链节点(响应拦截器)做特殊的处理当请求失败后, 直接重试, 当处理响应结果失败后, 如果抛出重试异常, 也会进入重试重试可以由服务端返回的响应头。原创 2024-11-25 00:00:02 · 920 阅读 · 0 评论 -
6.结果处理组件之ResponseHandler
Feign通过来处理响应的结果主要通过响应责任链来处理响应结果, 我们可以自定义其中的节点拦截器做自定义的事情责任链中默认添加了一个节点, 用来真正处理返回结果如果方法返回类型是Response, 那么根据返回的数据长度是否为空或者大于8k, 如果满足, 直接返回Response, 如果小于8k, 重新构建新的Response返回, 并关闭响应流;这里重新构建是因为流只能读取一次, 如果关闭了就读取不到了如果状态码是404, 并且设置dismiss404为true, 那么将忽略异常。原创 2024-11-24 19:59:12 · 940 阅读 · 0 评论 -
5.Feign的http组件Client
feign默认的http请求客户端是使用关于默认的连接方式, 我们可以配置, 来设置连接超时、读取超时、和是否在301,302的时候随服务端重定向可以设置为gzip或者deflate来请求体数据feign也提供了okHttp作为客户端的模块使用feign作为客户端的时候要注意配置与feign中Options参数中的相同, 不然每次请求都会重新构建客户端。原创 2024-11-22 00:07:31 · 678 阅读 · 0 评论 -
end.这篇先忽略
在第二节中介绍了contracts组件, 它用来按照约定的规则解析接口、方法、参数并生成;这篇要讲的组件就是根据生成。本篇主要介绍了它采用简单工厂模式, 通过create方法构建类型的;其中比较核心的是通过请求模板工厂解析器解析方法模板得到一个请求模板工厂最后通过依赖的一些组件构建对象还简单介绍了一下相关组件的功能接下来会继续介绍以及它依赖的一些组件。原创 2024-11-20 23:32:56 · 635 阅读 · 0 评论 -
3. RequestTemplate.Factory处理模板生成请求数据
RequestTemplate.Factory作为的核心组件之一, 用来解析标识在接口上的相关参数, 咱们有必要单独拿出一章来讲解。默认的参数编码器是, 只能处理String和byte[]类型的参数参数中存在@Param标识的参数, 且该参数不在请求路径, 请求头, 请求的参数模板(占位符表达式)中, 默认使用解析满足以下其中一点, 将会使用解析Contract类型是AlwaysEncodeBodyContract时。原创 2024-11-20 22:13:21 · 959 阅读 · 0 评论 -
2.contracts按约定解析接口生成模板
Feign 的 contracts 模块是 Feign 框架中一个核心部分,它定义了如何将 Java 接口解析成 HTTP 请求。Contract 是 Feign 用来解析接口的策略模式接口,它将接口方法上的注解转换为 Feign 可理解的请求模板,从而生成适合的 HTTP 请求。默认类继承/*** 定义哪些注释和值在接口上是有效的。*//*** 检验类并解析其中的方法, 获得方法的元数据MethodMetadata集合*/......Contract接口只有一个抽象方法。原创 2024-11-17 21:53:36 · 645 阅读 · 0 评论 -
1.feign的基本认识
开发并开源的,作为其微服务架构中实现服务调用的重要组成部分。Contract 是 Feign 用来解析接口的策略模式接口,它将接口方法上的注解转换为 Feign 可理解的请求模板,从而生成适合的 HTTP 请求。对于版本,可粗略的理解为: spring-cloud-starter-openFeign 是为Spring Cloud2x准备的,只不过维持了一段时间的对1x的兼容。extras 模块包含额外的支持功能,扩展了 Feign 的基本能力,通常用于整合与第三方库、功能模块或增强现有特性的集成。原创 2024-11-16 20:10:18 · 1021 阅读 · 0 评论