Spring Cloud全解析:服务调用之自定义Feign的配置

devtools/2024/12/23 6:31:19/

文章目录

    • 自定义Feign的配置
      • 自定义Feign


自定义Feign的配置

Feign的默认配置类是FeignClientsConfiguration,其内部定义了Feign默认使用的编码器、解码器、契约、重试机制等

java">@Bean
@ConditionalOnMissingBean
public Decoder feignDecoder() {// 解码器,将字节数组反序列化为方法返回值类型的对象,默认只支持反序列化为String和byte[]// SpringDecoder使用消息解析器可以支持任意类型return new OptionalDecoder(new ResponseEntityDecoder(new SpringDecoder(this.messageConverters)));
}@Bean
@ConditionalOnMissingBean
@ConditionalOnMissingClass("org.springframework.data.domain.Pageable")
public Encoder feignEncoder() {// 编码器,将请求体对应的方法参数序列化为字节数组,默认的只支持参数为String和byte[]// SpringEncoder可以将任意方法参数序列化return new SpringEncoder(this.messageConverters);
}@Bean
@ConditionalOnMissingBean
public Contract feignContract(ConversionService feignConversionService) {// Contract的作用是解析方法上的注解和参数,构建Http请求需要用到的基本参数// SpringMvcContract使得Feign能够识别SpringMvc的注解return new SpringMvcContract(this.parameterProcessors, feignConversionService);
}@Bean
@ConditionalOnMissingBean
public Retryer feignRetryer() {return Retryer.NEVER_RETRY;
}

但是有时候默认的并不满足全部的场景,我们需要自定义来进行配置,可以通过@FeignClient注解中的configuration属性来配置自定义的feign配置类,其优先级高于FeignClientsConfiguration

自定义Feign

java">@Configuration
public class FeignConfiguration {/*** 使用feign的原生注解* * @author zhanghe* @return feign的使用形式*/@Beanpublic Contract feignContract() {log.debug("原生feign  [bean注册]");return new feign.Contract.Default();}/*** 公共错误回调* @return 错误回调*/@Beanpublic FallBackImpl fallBackImpl() {return new FallBackImpl();}
}

如果该配置类为该项目下所有feign共用的,那么该类需要在@componentScan扫描下,这样就可以覆盖原本的默认配置,如果不希望该配置共用,只是个别feign使用,则该类不可以在@componentScan扫描下,而是要在所需要的feign中单独进行配置@FeignClient(configuration=FeignConfiguration.class)

参考文献

  • 自定义Feign的配置

http://www.ppmy.cn/devtools/114663.html

相关文章

从“群聊”到“一单到底”,天润融通工单系统助力品牌服务升级

“您好,我在xx店买的酸奶出现了质量问题,怎么处理?” “你们xx门店的服务态度怎么那么差啊,我要投诉!” “您好,xx店的微波炉总是坏的,店员根本不管!” 这些耳熟能详的抱怨&#…

手机换新,怎么把旧iPhone手机数据传输至新iPhone16手机

随着苹果公司推出了备受期待的iPhone 16。这款最新型号的iPhone不仅在设计上进行了革新,更在性能和功能上带来了前所未有的突破。对于那些准备从旧iPhone升级到iPhone 16的用户来说,最关心的问题之一就是如何把旧手机的资料转移到新手机中了。如果你不知…

基于STM32设计的水渠闸门远程控制系统(华为云IOT)(226)

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成【4】ESP8266工作模式配置1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要1.4 开发工具的选择【1…

【AI写作】介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用

【AI写作】介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用 浅浅的玩一下这个 AI 写作,本内容全为 AI 生成,仅为 AI 观点,无作者本人的观点。 Docker是一个开源的容器化平台,它可以轻松地将应用程序及…

代码随想录_刷题笔记_第二次

链表 — 环形链表 题目链接:142. 环形链表 II - 力扣(LeetCode) 题目要求: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点&#xff0c…

Rabbitmq中得RPC调用代码详解

文章目录 1.RPC客户端2.RabbitMQ连接信息实体类3.XML工具类 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 直接上代码了 1.RPC客户端 …

电脑开机速度慢怎么解决?

电脑开机速度慢怎么解决?电脑开机速度慢的原因可以是多方面的,以下是一些常见的原因: 启动项过多: 许多软件在系统启动时会自动启动,导致启动项过多,从而延长了开机时间。过时的驱动程序: 设备…

【达梦数据库】mysql 和达梦 tinyint 与 bit 返回值类型差异

测试环境 mysql5.7.44 达梦2024Q2季度版 前言 在mysql 中存在 tinyint(1)的用法来实现存储0 1 作为boolean的标识列;但是在达梦并不允许使用 tinyint(1)来定义列,只能使用 tinyint 即 取值范围为&#xff…