当前位置: 首页 > news >正文

Spring Cloud 之Feign

前言

Feign是一个声明式的Web服务客户端,使得编写HTTP客户端变得更简单。在Java程序中,只需要在方法前加上@FeignClient注解,Feign就会自动创建一个HTTP客户端,向指定的URL发送请求。

核心概念

1、注解:在服务接口方法上使用注解来描述HTTP请求和参数信息。比如@GetMapping、@PostMapping等。

2、配置:在服务接口或方法上使用配置来描述HTTP请求的配置信息。比如@RequestParam来描述请求参数、@RequestHeader来描述请求头信息等。

3、拦截器:在服务接口或方法上使用拦截器来处理HTTP请求和响应。比如Feign的ErrorDecoder用于处理请求异常、Logger用于记录请求和响应日志等。

底层原理

1、动态代理:Feign使用了动态代理技术,在运行时根据注解和配置生成代理对象,从而实现对HTTP请求的封装和处理。

2、负载均衡:Feign支持多种负载均衡策略,比如随机、轮询、最少活跃调用等。通过在服务接口或方法上添加@LoadBalanced注解,即可开启负载均衡功能。

3、连接管理:Feign使用了连接池技术来管理HTTP连接,以提高请求性能。通过在配置文件中设置connection-pooling参数,可以启用连接池功能。

4、自定义拦截器:Feign支持自定义拦截器,通过实现Feign.Builder中的Interceptor接口,可以实现对HTTP请求和响应的处理。

Feign实战项目代码

1、首先,你需要定义一个 Feign 接口,声明了所有需要调用的方法和参数。

public  interface  UserService  {@GetMapping("/user/{id}")   User  getUserById(@PathVariable  Long  id);@PostMapping("/user")   User  addUser(@Valid  @RequestBody  User  user);@PutMapping("/user/{id}")   User  updateUser(@PathVariable  Long  id,  @Valid  @RequestBody  User  user);@DeleteMapping("/user/{id}")   void  deleteUser(@PathVariable  Long  id);   
}

在上面的代码中,我们定义了一个 UserService 接口,它包含了四个方法:getUserById、addUser、updateUser 和 deleteUser。

2、接下来,你需要定义一个 Feign 配置类,用于配置 Feign 的实例。这个类需要指定 Feign 的实例地址和端口号。

@Configuration   
public  class  FeignConfig  {@Value("${api.url}")   private  String  apiUrl;@Bean   public  RestTemplate  restTemplate()  {   RestTemplate  restTemplate  =  new  RestTemplate();   restTemplate.setConnectionFactory(new  NioRestTemplate());   return  restTemplate;   }@Bean   public  FeignClientFactory<UserService>  userServiceFactory()  {   FeignClientFactory<UserService>  clientFactory  =  new  FeignClientFactory<>();   clientFactory.setRestTemplate(restTemplate());   return  clientFactory;   }   
}

在上面的代码中,我们定义了一个名为 apiUrl 的配置属性,用于指定 Feign 的实例地址。然后,我们定义了一个名为 restTemplate 的 Bean,用于创建 Feign 的实例。

3、最后,你需要在 Spring Cloud 项目中创建一个 Feign 客户端,用于调用远程服务。

@RestController   
@RequestMapping("/api")  {@Autowired   private  FeignClientFactory<UserService>  userServiceFactory;@GetMapping   public  User  getUserById(@PathVariable  Long  id)  {   User  user  =  userServiceFactory.getClient().getUserById(id);   return  user;   }@PostMapping("/user")   public  User  addUser(@Valid  @RequestBody  User  user)  {   User  addedUser  =  userServiceFactory.getClient().addUser(user);   return  addedUser;   }@PutMapping("/user/{id}")   public  User  updateUser(@PathVariable  Long  id,  @Valid  @RequestBody  User  user)  {   User  updatedUser  =  userServiceFactory.getClient().updateUser(id,  user);   return  updatedUser;   }@DeleteMapping("/user/{id}")   public  void  deleteUser(@PathVariable  Long  id)  {   userServiceFactory.getClient().deleteUser(id);   }   
}

在上面的代码中,我们定义了一个名为 api 的 RestController,它包含了五个接口,分别是 getUserById、addUser、updateUser、deleteUser 和 deleteUser。

通过以上步骤,你就可以在 Spring Cloud 项目中使用 Feign 实现服务间调用了。

相关文章:

Spring Cloud 之Feign

前言 Feign是一个声明式的Web服务客户端&#xff0c;使得编写HTTP客户端变得更简单。在Java程序中&#xff0c;只需要在方法前加上FeignClient注解&#xff0c;Feign就会自动创建一个HTTP客户端&#xff0c;向指定的URL发送请求。 核心概念 1、注解&#xff1a;在服务接口方…...

通用开源自动化测试框架 - Robot Framework

一、什么是 Robot Framework&#xff1f; 1. Robot Framework 的历史由来 Robot Framework是一种通用的自动化测试框架&#xff0c;最早由Pekka Klrck在2005年开发&#xff0c;并由Nokia Networks作为内部工具使用。后来&#xff0c;该项目以开源形式发布&#xff0c;并得到了…...

css position属性与js滚动

“视口”就是浏览器窗口中实际显示文档内容的区域&#xff0c;不包含浏览器的“外框”&#xff0c;如菜单、工具条和标签。文档则是指整个网页。 1 css 的position static 正常定位&#xff0c;是元素position属性的默认值&#xff0c;元素遵循常规流。 relative 相对定位&…...

python内置模块hashlib对于字符串的加密解密加盐

hash是一类算法而hashlib模块是Python的一个内置模块&#xff0c;主要功能是使用对应的hash算法&#xff0c;加密二进制内容解密二进制内容 常见的hash算法有md5、sha1&#xff0c;sha256, sha512等 特点 1.内容敏感,那怕一个很小的字符发生改变都很明显 2.不可逆,不能逆向求值…...

获取客户端请求IP及IP所属城市

添加pom依赖 <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>2.6.5</version> </dependency> public class IpUtil { private…...

【洛谷 P1106】删数问题 题解(贪心+字符串)

删数问题 题目描述 键盘输入一个高精度的正整数 N N N&#xff08;不超过 250 250 250 位&#xff09;&#xff0c;去掉其中任意 k k k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N N N 和 k k k&#xff0c;寻找一种方案使得剩下的数字组成…...

【Python · PyTorch】线性代数 微积分

本文采用Python及PyTorch版本如下&#xff1a; Python&#xff1a;3.9.0 PyTorch&#xff1a;2.0.1cpu 本文为博主自用知识点提纲&#xff0c;无过于具体介绍&#xff0c;详细内容请参考其他文章。 线性代数 & 微积分 1. 线性代数1.1 基础1.1.1 标量1.1.2 向量长度&…...

建模和图表工具:Software Ideas Modeler Crack

用于图表、软件设计和分析的 CASE 工具 Software Ideas Modeler 是一款智能CASE 工具和 图表软件&#xff0c;支持 UML、SysML、ERD、BPMN、ArchiMate、流程图、用户故事、线框图。 提升用户体验和人工智能集成 - Software Ideas Modeler 14.05 最近发布的 14.05 版本带来了一…...

Android开发,车载通讯应用——binder通讯原理解析

Binder简单理解 简单来说&#xff0c;Binder 就是用来Client 端和 Server 端通信的。并且 Client 端和 Server 端 可以在一个进程也可以不在同一个进程&#xff0c;Client 可以向 Server 端发起远程调用&#xff0c;也可以向Server传输数据&#xff08;当作函数参数来传&#…...

[算法]求n!在m进制下末尾有多少个0

参考链接&#xff1a;求n&#xff01;在m进制下末尾0的个数_.!零n,,m-CSDN博客 我们这里和参考链接不同 使用结构体去存储每个因数的信息 然后使用变量index作为索引&#xff0c;其最终值为因数的个数 具体原理&#xff1a; 例子1&#xff1a;求9&#xff01;在10进制下的…...

mysql之用户管理、权限管理、密码管理

用户管理 创建用户create user 杨20.0.0.13 identified by 123; 用户重命名rename user 杨20.0.0.13 to yang20.0.0.13; 删除用户drop user 杨20.0.0.13; 权限管理 查看用户权限show grants for 杨20.0.0.13; 赋予用户权限grant all privileges on *.* to 杨localhost id…...

图情档核心期刊 | 北大核心、CSSCI、CSCD

中文核心期刊要目总览&#xff08;A Guide to the Core Journal of China&#xff0c; 简称北大核心&#xff09;&#xff1a; 主办单位&#xff1a;北京大学图书馆更新频率&#xff1a;北大核心在2008年之前每4年更新研究和编制出版一次&#xff0c;2008年之后&#xff0c;改为…...

Mac上具好用的屏幕录像工具(Omi录屏专家)Screen Recorder By Omi Mac 下载安装详细教程

Omi 录屏专家 是 Mac 上的一款出色的录音工具&#xff0c;它让您能够在Mac电脑上轻松录制和保存高质量音频。这款应用拥有简单直观的操作界面&#xff0c;无论我们水平如何&#xff0c;都可以轻松捕捉录制卓越的音质和录像视频。 该版本的 Omi 安装后可以直接支持最高 4K 60帧…...

牛客网刷题-(8)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

oracle 重启步骤及踩坑经验

oracle 重启步骤及踩坑经验 标准重启步骤 切换到oracle用户 su - oracle关闭监听 lsnrctl stop杀掉oracle有关进程 ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {print $2}|xargs kill -9#查询pid ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {p…...

处理mysql数据量大查询缓慢问题(最少百万才有差别)

我建了两个表&#xff0c;一个售后单表&#xff0c;一个售后商品明细表&#xff0c;都是五十个字段。 select * FROM (select id, as_id, as_date, outer_as_id, so_id, type, created, modified, status, status_name, shop_status, shop_status_name, remark, question_type,…...

element-plus走马灯不显示

问题描述 依赖正确&#xff0c;代码用法正确&#xff0c;但是element-plu走马灯就是不显示&#xff01;&#xff01; <div class"content"><el-carousel height"150px" width"200px"><el-carousel-item v-for"item in 4&qu…...

【精】UML及软件管理工具汇总

目录 1 老七工具&#xff08;规划质量&#xff09; 1.1 因果图&#xff08;鱼骨图、石川图&#xff09; 1.2 控制图 1.3 流程图:也称过程图 1.4 核查表:又称计数表 1.5 直方图 1.6 帕累托图 1.7 散点图&#xf…...

【uniapp+vue3】scroll-view实现纵向自动滚动及swiper实现纵向自动滚动

scroll-view本身不支持自动滚动&#xff0c;通过scroll-top属性控制滚动&#xff0c;但是不可以循环滚动 <scroll-view class"notice-bar" scroll-y"true" ref"scrollViewRef" :scroll-top"data.scrollViewTop"scroll-with-animati…...

this.refs[‘tagInput‘].refs.input.focus()和this.$refs[‘tagInput‘].focus()区别

this.$refs[tagInput].$refs.input.focus()和this.$refs[tagInput].focus()两者之间的选择取决于你的组件结构和如何访问DOM元素。 1.this.$refs[tagInput].$refs.input.focus(): 2.这种语法假设你的this.$refs[tagInput]是一个组件实例&#xff0c;并且这个组件实例有一个名为…...

播客内容找不到源头?Perplexity深度索引机制解析,7类冷门播客源自动唤醒术

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;播客内容找不到源头&#xff1f;Perplexity深度索引机制解析&#xff0c;7类冷门播客源自动唤醒术 Perplexity 的播客内容发现能力并非依赖传统 RSS 聚合或平台 API 抓取&#xff0c;而是通过其自研的深度索引…...

Claude规格说明书生成器:提升大模型任务执行效率的工程化方法

1. 项目概述&#xff1a;一个为Claude模型定制的“规格说明书”生成器如果你和我一样&#xff0c;经常与Anthropic的Claude系列大语言模型打交道&#xff0c;无论是Claude 3 Opus、Sonnet还是Haiku&#xff0c;那你肯定遇到过这样的场景&#xff1a;你有一个复杂的任务&#xf…...

Artisan:开源咖啡烘焙软件的终极指南,从入门到精通的完整解决方案

Artisan&#xff1a;开源咖啡烘焙软件的终极指南&#xff0c;从入门到精通的完整解决方案 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 你是否曾为咖啡烘焙的不可预测性而烦恼&a…...

【亲测免费】【免费下载】 探索视觉新边界:RexVision视觉框架深度解析

探索视觉新边界&#xff1a;RexVision视觉框架深度解析 【下载地址】RexVision视觉框架下载仓库 本仓库提供了一个名为“RexVision视觉框架”的资源文件下载。该框架是一个视觉处理相关的工具或库&#xff0c;用户只需将文件放置在D盘的根目录下即可进行编译和使用 项目地址:…...

深度解析Windows Subsystem for Android:企业级跨平台运行时架构与最佳实践

深度解析Windows Subsystem for Android&#xff1a;企业级跨平台运行时架构与最佳实践 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem f…...

如何高效使用AutoHotkey编译器:Ahk2Exe完整指南与实战技巧

如何高效使用AutoHotkey编译器&#xff1a;Ahk2Exe完整指南与实战技巧 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 对于Windows自动化脚本开发者而言&#xff…...

AMP插件开发者工具完全指南:如何快速诊断和修复AMP验证问题

AMP插件开发者工具完全指南&#xff1a;如何快速诊断和修复AMP验证问题 【免费下载链接】amp-wp Enable AMP on your WordPress site, the WordPress way. 项目地址: https://gitcode.com/gh_mirrors/am/amp-wp 你是否正在为WordPress网站的AMP验证问题而烦恼&#xff1…...

国产多模态大模型:产业协同全景与实战指南

国产多模态大模型&#xff1a;产业协同全景与实战指南 引言 在人工智能浪潮席卷全球的背景下&#xff0c;国产多模态大模型正从技术探索迈向广泛的产业协同应用。与只能处理文本或图像的单一模态模型相比&#xff0c;多模态大模型能同时理解、关联和生成文本、图像、音频、视频…...

3步掌握B站视频转文字神器:为什么你需要这个效率提升10倍的工具

3步掌握B站视频转文字神器&#xff1a;为什么你需要这个效率提升10倍的工具 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了整理一个精彩的B站…...

新手首次使用 Taotoken 从注册到完成第一个 API 调用的完整指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手首次使用 Taotoken 从注册到完成第一个 API 调用的完整指南 本文旨在为初次接触 Taotoken 的开发者提供一份清晰的入门指引。我…...