Spring Cloud OpenFeign基础入门与使用实践总结

官网地址:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign

GitHub地址:https://github.com/spring-cloud/spring-cloud-openfeign

本文SpringCloud版本为:

<spring.boot.version>3.1.7</spring.boot.version>
<spring.cloud.version>2022.0.4</spring.cloud.version>

【1】概述

OpenFeign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用OpenFeign创建一个接口并对其进行注释。它具有可插入的注释支持,包括OpenFeign注释和JAX-RS注释。OpenFeign还支持可插拔编码器和解码器。

Spring Cloud添加了对Spring MVC注释的支持,以及对使用Spring Web中默认使用的HttpMessageConverter的支持。

Spring Cloud集成了Eureka、Spring Cloud CircuitBreaker以及Spring Cloud LoadBalancer,以便在使用OpenFeign时提供负载平衡的http客户端。

与Feign的区别

FeignOpenFeign 都是用于微服务架构中的声明式HTTP客户端,它们允许开发者以一种简单且类型安全的方式来定义HTTP API客户端。然而,它们之间存在一些关键性的区别,主要体现在以下方面:

起源与归属

  • Feign 最初由Netflix开发,是Netflix OSS(Open Source Software)套件的一部分,用于简化客户端对服务端接口的调用,特别适合于Spring Cloud环境。
  • OpenFeign 是Spring Cloud团队在Feign的基础上进行的扩展和封装,以便更好地融入Spring Cloud生态系统,尤其是在Spring Boot 2.0及更高版本中。

依赖管理

  • Feign 使用的依赖是spring-cloud-starter-feign
  • OpenFeign 使用的依赖是spring-cloud-starter-openfeign
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

注解支持

  • Feign 直接在接口上使用其自身的注解,如@FeignClient@RequestMapping等,但这些注解的使用方式与Spring MVC的注解有所不同。
  • OpenFeign 支持标准的Spring MVC注解,如@GetMapping, @PostMapping等,这使得它可以无缝地集成到Spring MVC的框架中。

版本兼容性

  • Feign 可能在Spring Boot较新版本中支持不佳或需要额外配置,因为它的设计更早,可能没有考虑到Spring Boot后续的变化。
  • OpenFeign 是为了适应Spring Boot 2.0及以后版本的改进而设计的,因此在新的Spring Boot项目中使用更加推荐。

社区支持与更新

  • OpenFeign 作为Spring Cloud官方维护的项目,通常会有更好的文档、示例和社区支持,以及更频繁的更新和bug修复。

总结

OpenFeign可以看作是Feign的进化版本,它修正了一些Feign的不足,并且更加紧密地集成了Spring Boot和Spring Cloud的特性。如果你正在构建一个新的项目或者你正在使用的Spring Boot版本高于2.0,那么使用OpenFeign会是一个更佳的选择。

【2】应用实践

① pom依赖

<!--openfeign-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

② 服务接口

如下所示,接口上面使用@FeignClient注解并指定了远程服务实例名字。

@FeignClient(value = "cloud-payment-service")
public interface PayFeignApi
{/*** 新增一条支付相关流水记录* @param payDTO* @return*/@PostMapping(value = "/pay/add")ResultData addPay(@RequestBody PayDTO payDTO);//...
}    

③ 主启动类

这里使用@EnableFeignClients注解

@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul为注册中心时注册服务
@EnableFeignClients//启用feign客户端,定义服务+绑定接口,以声明式的方法优雅而简单的实现服务调用
public class MainOpenFeign80
{public static void main(String[] args){SpringApplication.run(MainOpenFeign80.class,args);}
}

如此即可实现服务实例的远程调用,抛弃了RestTemplate+@LoadBalanced,更加优雅简洁。

【3】超时控制

默认OpenFeign客户端等待60秒钟,但是服务端处理超过规定时间会导致Feign客户端返回报错。

① 全局设置

spring:cloud:openfeign:client:config:default:#连接超时时间connectTimeout: 3000#读取超时时间readTimeout: 3000

② 指定服务实例配置

如下这里为服务实例cloud-payment-service设置为2秒。


spring:cloud:openfeign:client:config:default:#连接超时时间connectTimeout: 3000#读取超时时间readTimeout: 3000cloud-payment-service:#连接超时时间connectTimeout: 20000#读取超时时间readTimeout: 20000

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

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

相关文章

火锅食材配送小程序的作用有什么

火锅店、麻辣烫店、餐厅等对火锅丸子食材的需求量很高&#xff0c;还有普通消费者零售等&#xff0c;市场中或城市里总是有着较为知名的食材店或厂商&#xff0c;通过产品质量、口碑、宣传、老客复购等获得更多生意营收。 线下生意放缓&#xff0c;需要商家拓宽渠道。运用雨科…

2、网上图书订购

完整DDLDML SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for administarators -- ---------------------------- DROP TABLE IF EXISTS administarators; CREATE TABLE administarators (admin_id int(11) NOT NULL AU…

搜维尔科技:SenseGlove Nova2国内首款支持手掌心力回馈手套开售

《SenseGlove Nova 2》现正全球发行中! 搜维尔科技独家代理最新上市的 SenseGlove Nova 2 是世上首款&#xff0c;也是目前市面上唯一一款提供手掌力回馈的无缐VR力回馈手套&#xff0c;它结合了三种最先进的反馈技术&#xff0c;包括主动反馈、强力反馈及震动反馈&#xff0c…

基于横纵向的混合联邦学习原理分析

近期陆续接触到关于混合联邦学习的概念&#xff0c;但基于横纵向的混合联邦实际的应用案例却几乎没有看到&#xff0c;普遍是一些实验性的课题&#xff0c;因此这一领域知识没有被很好普及。本篇文章的目的&#xff0c;主要是分析讨论关于横纵向混合联邦学习的业务场景、应用架…

nginx: [warn] 20240 worker_connections exceed open file resource limit: 1024

nginx: [warn] 20240 worker_connections exceed open file resource limit: 1024 报错翻译过来就是&#xff1a; nginx&#xff1a;[警告] 20240 worker_connections超出打开文件资源限制&#xff1a;1024 解决方法&#xff1a; 1.查看当前文件打开数量的限制 ulimit -S…

2024软博会

2024年&#xff0c;金秋的十月&#xff0c;青岛国际会展中心迎来了一年一度的科技盛宴——青岛国际软件融合创新博览会&#xff08;简称“青岛软博会”&#xff09;。这场为期三天的展会&#xff0c;不仅吸引了全球软件产业的目光&#xff0c;更成为了展示中国软件产业发展成果…

OpenHarmony南向驱动开发实战-Input

简介 该仓下主要包含Input模块HDI&#xff08;Hardware Driver Interface&#xff09;接口定义及其实现&#xff0c;对上层输入服务提供操作input设备的驱动能力接口&#xff0c;HDI接口主要包括如下三大类&#xff1a; InputManager&#xff1a;管理输入设备&#xff0c;包括…

数据库系统概论(超详解!!!) 第十四节 数据库恢复技术

1.事务的基本概念 1.事务 事务(Transaction)是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。 事务和程序是两个概念&#xff0c; 在关系数据库中&#xff0c;一个事务可以是一条SQL语句&#xff…

rockey linux rpm安装mysql 8.4.0

背景介绍&#xff1a; 系统 rockey linux 9.4 mysql 8.4.0 我一开始想在系统上安装5.7的着&#xff0c;因为我有这个包&#xff0c;但是通过rpm安装的时候&#xff0c;到最后一步提示我没有/usbin/chkconfig 这个目录&#xff0c;怀疑是系统的问题&#xff0c;然后想安装chk…

未来先行!MWC 2024 世界移动通信大会盛大开幕!!!

2024MWC上海世界移动通信大会&#xff0c;在上海新国际博览中心&#xff08;SNIEC&#xff09;盛大开幕。 今年&#xff0c;MWC的主办方GSMA&#xff08;全球移动通信系统协会&#xff09;为这届MWC定下了一个主题——“Future First&#xff08;未来先行&#xff09;”。各大…

内网穿透技术

内网穿透&#xff08;NAT traversal&#xff09;是一种技术&#xff0c;用于实现公网与内网之间的通信连接。当内网中的设备无法直接从公网访问时&#xff0c;内网穿透技术可以通过一些手段&#xff0c;让公网上的设备能够穿透到内网中的设备&#xff0c;建立起通信连接。 说白…

盘点7款适合团队使用的知识库工具

作为一名技术爱好者和企业管理者&#xff0c;我深知知识库工具在日常工作中的重要性。 无论是个人笔记管理还是企业知识共享&#xff0c;知识库工具都能极大地提升我们的工作效率和信息管理水平。 根据麦肯锡全球研究院报告显示&#xff0c;使用知识库工具可以帮助个人或者企…

记录一次java web接口压测调优过程

3台8核服务器&#xff0c;目标400tps 1、server采用的线程数200&#xff0c;队列100&#xff0c;借鉴tomcat Tomcat作为一款流行的Java Web服务器&#xff0c;其默认配置覆盖了从端口设置、应用部署、日志记录到性能调整等多个方面。以下是一些关键的默认配置概览&#xff1a…

windows11 OneDrive禁止开机自启动。

1、先上个图&#xff1a; 开机默认自启&#xff0c;然后设置中&#xff0c;也没有找到可以设置的。 2、然后我们通过任务管理器来处理&#xff0c;右键任务栏&#xff1a; 打开任务管理器&#xff1a; 选中OneDrive&#xff0c;然后点击【禁 用】按钮即可。 或者鼠标右键&…

【C++:list】

list概念 list是一个带头的双向循环链表&#xff0c;双向循环链表的特色&#xff1a;每一个节点拥有两 个指针进行维护&#xff0c;俩指针分别为prev和next,prev指该节点的前一个节点&#xff0c;next为该节点的后一个节点 list的底层实现中为什么对迭代器单独写一个结构体进行…

视频均衡驱动器,SDI产品PIN LMH0387

视频均衡驱动器,功能仿制 TI公司 LMH0387产品。本期间支持 DVB-ASI,作为驱动器能够选择输出速率,作为均衡接收器能支持100m 以上传输距离(线缆类型 Belden1694A)。 工作温度范围:-40℃~85℃:a) 电源电压:3.14V~3.46V: 驱动器输出信号:单端 CML 信号: 均衡器输出信号:LVDS 电平…

PHP ODBC:连接数据库的桥梁

PHP ODBC&#xff1a;连接数据库的桥梁 PHP ODBC&#xff08;Open Database Connectivity&#xff09;是一个允许PHP应用程序连接到各种数据库管理系统的扩展。它为PHP提供了一个标准的数据库访问接口&#xff0c;使得开发者可以编写不依赖于特定数据库系统的代码。本文将详细…

精通Postman:请求头设置的艺术

精通Postman&#xff1a;请求头设置的艺术 在API测试和开发过程中&#xff0c;Postman是一个不可或缺的工具。它不仅简化了请求的发送过程&#xff0c;还提供了丰富的功能来定制和优化请求。其中&#xff0c;设置请求头&#xff08;Headers&#xff09;是配置HTTP请求的关键部…

【C++/STL】:优先级队列的使用及底层剖析仿函数

目录 &#x1f4a1;前言一&#xff0c;优先级队列的使用二&#xff0c;仿函数1&#xff0c;什么是仿函数2&#xff0c;仿函数的简单示例 三&#xff0c;优先级队列的底层剖析 &#x1f4a1;前言 优先队列(priority_queue)是一种容器适配器&#xff0c;默认使用vector作为其底层…

在 notebook 中输入代码 `%matplotlib inline` 是什么意思?

在 Jupyter Notebook 中输入代码 %matplotlib inline 是一种魔法命令&#xff0c;它用于配置 Matplotlib 库的显示方式。具体来说&#xff0c;它会在 Notebook 单元格内嵌绘图&#xff0c;使生成的图表直接显示在 Notebook 的单元格输出中&#xff0c;而不是弹出一个单独的窗口…