@FeignClient注解详解

@FeignClient

@FeignClient 是 Spring Cloud 中用于声明一个 Feign 客户端的注解。Feign 是一个声明式的 Web Service 客户端,它的目的是让编写 HTTP 客户端变得更简单。通过 Feign,只需要创建一个接口,并使用注解来描述请求,就可以直接执行 HTTP 请求了。

在微服务架构中,使用FeignClient注解可以轻松实现各模块之间的调用

@FeignClient()注解只能在接口上使用,它的基本用法如下:

@FeignClient("stores")
public interface StoreClient {@RequestMapping(method = RequestMethod.GET, value = "/stores")List<Store> getStores();@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")Store update(@PathVariable("storeId") Long storeId, Store store);
}

服务的启动类要有@EnableFeignClients 注解才能使Fegin生效

@FeignClient属性详解

name(和value相同):指定FeignClient的名称,如果项目使用了注册中心,name属性会作为微服务(注册到注册中心的名字)的名称,用于服务发现,会在注册中心查找对应名称的服务

url:FeignClient调用的地址,用于指定Feign客户端调用的地址,优先级比服务名(name)高,如果配置了url,那么将以url的路径进行请求

contextId:FeigntContext维护着客户端map的key,如果没设置,默认是name属性,如果是默认属性的话,那么一个客户端只能有一个@FeignClient接口,有时候我们不想将一个服务的所有调用接口都定义在一个接口中,那么就需要定义不同的contextId,否则启动的时候会报错(Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true)

如下所示,我们为user服务创建了两个相同服务的接口

/*** user服务的第一个FeigntClient接口*/
@FeignClient(name = "user",contextId="userfeignt1")
public interface UserFeigntClient1 {@GetMapping("/user/get")public User getUser(@RequestParam("id") int id);
}/*** user服务的第二个FeigntClient接口*/
@FeignClient(name = "user",contextId="userfeignt2")
public interface UserFeigntClient2 {@PostMapping("/user/get")public int updateUser(User user);}

注:contextId不能带_等符号

decode404:布尔值,默认是false,表示对于一个HTTP状态码为404的请求是否需要进行解码。默认为 false,表示不进行解码,当成一个异常处理。设置为true 之后,遇到HTTP状态码为404的Response还是会解析这个请求的body

fallback:表示fallback类,也就是容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑。需要实现FeignClient对应的接口,当调用方法发生异常时,会调用这个Fallback类对应的FeignClient接口方法。如果配置了fallback属性,就会把Fallback类包装在一个默认的FallbackFactory实现类FallbackFactory.Default上,而不使用fallbackFactory属性对应的FallbackFactory实现类。

容错类如下:

@Component
public class UserFeigntClient1Fallback implements UserFeigntClient1{@Overridepublic User getUser(int id) {return new User();}}

fallbackFactory:表示生产 fallback 类的Factory,需要实现feign.hystrix.FallbackFactory接口,FallbackFactory内部会针对一个Throwable异常返回一个Fallback类进行fallback操作。
fallbackFactory类可以获取异常,更推荐使用fallbackFactory来定义容错类

@Slf4j
@Component
public class UserFeigntClient1FallbackFactory implements FallbackFactory<UserFeigntClient1> {@Overridepublic UserFeigntClient1 create(Throwable throwable) {return new UserFeigntClient1() {@Overridepublic User getUser(int id) {log.error("获取账号异常:{},异常:{}",id,throwable);return new User();}};}
}

configuration:用于指定Feign配置类,通过实现FeignConfigurer接口,可以自定义Feign的Encoder、Decoder、LogLevel、Contract等属性

@FeignClient(name = "exampleClient", configuration = ExampleFeignConfig.class)  
public interface ExampleClient {  // 定义示例客户端的方法  
}  @Configuration  
public class ExampleFeignConfig implements FeignConfigurer {  @Override  public void configure(Client.Builder clientBuilder) {  clientBuilder.encoder(new GzipEncoder());  clientBuilder.decoder(new GzipDecoder());  }  
}

path:定义当前FeignClient的统一前缀,在服务名或URL与requestPath之间,它指定了Feign客户端在发送HTTP请求时需要附加的路径信息,
比如我們設置了path = “/api”,那麽Feign客户端将在发送请求时将该路径附加到URL上。例如,目标URL为http://example.com,那么实际发送的请求URL将为http://example.com/api

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

obswebsocket+douyinAPI+python,教你如何三步搭建自己的AI美女直播间,24小时的永动机

一&#xff1a;什么是AI直播美女直播间 就是在直播的时候通过弹幕进行选择不同的ai人物进行跳舞的直播间大致就是 可以看到左边是有提示&#xff0c;根据观众刷礼物的不同进行选择某一个AI人物进行展示&#xff0c;怎么通过技术手段实现呢 二&#xff1a;你需要懂的 其实还…

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区 1、下载银河麒麟V10镜…

AI工具网站汇总——学习的好帮手

一、聊天AI 1.ChatGPT 地表最强AI聊天机器人 网址&#xff1a;https://chat.openai.com 2.Anthropic Anthropic发布的与ChatGPT竞争的聊天机器人 网址&#xff1a;https://www.anthropic.com 3.文心一言 百度全新知识增强大语言模型&#xff01;国产聊天机器人 网址&…

你想成为Linux高手吗?这些技巧你必须知道

系统信息 arch 显示机器的处理器架构 name -m 显示机器的处理器架构 name -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 -(SMBIOS/DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试读取操作 cat /proc/cpuinfo …

so-vits-svc的使用

1. 启动工程 找到工程的路径&#xff0c;找到启动的bat文件&#xff0c;这里以 d:/so-vits-svc为例。 2. 启动过程 启动后会出现cmp的一个弹框&#xff0c;初始启动相对较慢&#xff0c;请耐心等待一会儿&#xff0c;启动完成后&#xff0c;会出现一个页面&#xff0c;如下…

JDK各个版本特性讲解-JDK14特性

JDK各个版本特性讲解-JDK14特性 一、Java14概述二、语法层面的变化1. instanceof2. switch表达式3. 文本块的改进4. Records记录类型 二、关于GC1.G1的NUMA内存分配优化2. 弃用SerialCMS,ParNewSerial Old3.删除CMS4.ZGC on macOS and Windows 三、其他变化1.友好的空指针异常提…

HAproxy做七层代理+keepalived高可用,实现动静分离,由nginx处理静态页面,tomcat处理动态页面

目录 一、三种软负载均衡器的区别 关于三种负载均衡器的性能对比&#xff1a; 关于三种负载均衡器的代理类型对比&#xff1a; 关于三种负载均衡器的健康检查对比&#xff1a; 二、haproxy的8中负载均衡调度算法 haproxy的会话保持的方式 haproxy的配置文件学习 三、实操…

(详解版)创建线程的四种方式

文章目录 Java中创建线程的四种方式1. 继承Thread类并重写 run 方法来创建线程2. 实现Runnable接口并实现 run 方法来创建线程。3. 使用Callable接口创建线程4. 使用Executor框架创建线程 Java中创建线程的四种方式 接下来我会详细解释这四种方式创建线程如何实现. 我们如果要…

【HarmonyOS开发】ArkTs关系型和非关系型数据库的存储封装

前面使用了首选项的存储方式&#xff0c;因此将其他的两种存储方式&#xff08;键值型数据库和关系型数据库&#xff09;也学习一下&#xff0c;简单记录一下&#xff0c;并进行封装&#xff0c;方便后续使用。 1、效果预览 2、使用条件 2.1 键值型数据库 键值型数据库实现数据…

RabbitMQ入门指南(三):Java入门示例

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、AMQP协议 1.AMQP 2.Spring AMQP 二、使用Spring AMQP实现对RabbitMQ的消息收发 1.案例准备阶段 2.入门案例&#xff08;无交换机&#xff09; 3.任务模型案例&#xff08;Work Queues&#xff0…

九.数据处理之增删改

数据处理之增删改 1.插入数据1.1实际问题1.2方式1&#xff1a;VALUES的方式添加1.3方式2&#xff1a;将查询结果插入到表中 2.更新数据3.删除数据4.MySQL8新特性&#xff1a;计算列5.综合案例 1.插入数据 1.1实际问题 解决方式&#xff1a;使用INSERT语句向表中插入数据 1.2方…

vue - 详解配置反向代理后,项目出现白屏的情况,js、css文件404问题解决方案(Vue解决项目白屏以及反向代理)

问题说明 添加反向代理代码后,前端运行白屏。 // 设置baseURL,8888是后端端口号,前端请求默认发送到baseURL的地址 var axios = require(axios) axios.defaults.baseURL = http://localhost:8888/api // 全局注册,之后可在其他组件中通过 this.$axios 发送数据 Vue.proto…

【jupyter notebook】jupyter notebook 调用另一个jupyter notebook 的函数

总结 使用 %run 魔法命令将 Notebook 转换为py文件使用 nbimporter 库手动复制代码优点notebook最前面加上即可最基本方法就跟导入py文件一样&#xff0c;不会被执行一遍快缺点所有的代码都会执行一遍修改原文件就要重新转换&#xff0c;且 从自定义的 .py 文件中导入函数时&a…

文献速递:生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型:多中心研究

文献速递&#xff1a;生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型&#xff1a;多中心研究 本周给大家分享文献的主题是生成对抗网络&#xff08;Generative adversarial networks, GANs&#xff09;在医学影像中的应用。文…

Codeforces Round 916 (Div. 3)(E:贪心 F贪心dfs G tarjan+topsort )

A&#xff1a;直接暴力统计每个字符的次数是否达标即可 #include<bits/stdc.h> using namespace std; const int N 3e510,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; typedef unsigned long long ULL;const long l…

微信小程序更新机制

1/同步更新 1、定期检查更新时&#xff1b; 2、长期未使用&#xff0c;首次进入会同步更新&#xff0c;但在弱网或者下载新版本失败的情况下&#xff0c;还会使用旧版本。 2/异步更新&#xff1a; 启动时异步更新 3/开发者手动触发更新 在启动时异步更新的情况下&#xff0c;…

电源模块测试方法 | 怎么测试电源负载瞬态响应?

负载瞬态响应测试是检测电源稳定性和质量的重要方法之一&#xff0c;而电源稳定性是设备正常运行的基础。通过负载瞬态响应测试来检测电源的响应速度和稳定性&#xff0c;从而优化电源设计&#xff0c;提升性能&#xff0c;确保电子设备可以稳定工作。 什么是负载瞬态响应测试?…

js知识点1:防抖节流

js知识点1&#xff1a;防抖节流 防抖节流 防抖节流&#xff0c;本质上是优化高频率执行代码的一种手段 定义&#xff1a; 防抖: n 秒后再执行该事件&#xff0c;若在 n 秒内被重复触发&#xff0c;则重新计时 节流: n 秒内只运行一次&#xff0c;若在 n 秒内重复触发&#xff0…

【C语言】SCU安全项目2-BufBomb

目录 关键代码解读&#xff1a; getxs() getbuf() test() 核心思路 具体操作1 具体操作2 前段时间忙于强网杯、英语4级和一些其他支线&#xff0c;有点摸不清头绪了&#xff0c;特别是qwb只有一个输出&#xff0c;太过坐牢&#xff0c;决定这个安全项目做完后就继续投身…

Spring MVC框架支持RESTful,设计URL时可以使用{自定义名称}的占位符@Get(“/{id:[0-9]+}/delete“)

背景&#xff1a;在开发实践中&#xff0c;如果没有明确的规定URL&#xff0c;可以参考&#xff1a; 传统接口 获取数据列表,固定接口路径&#xff1a;/数据类型的复数 例如&#xff1a;/albums/select RESTful接口 - 根据ID获取某条数据&#xff1a;/数据类型的复数/{id} - 例…