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

Springcloud OpenFeign 详解

一、概述

OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,整合了hystrix,同时,可以和Eureka和ribbon配合使用,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

官网:Spring Cloud OpenFeign

OpenFegin中的两个常用注解

@FeignClient: 用于通知Feign组件对该接口进行代理(不需要编写接口实现),使用者可直接通过@Autowired注入。

@EnableFeignClients:

Spring Cloud应用在启动时,Feign会扫描标有@FeignClient注解的接口,生成代理,并注册到Spring容器中。

二、Feign和openFeign有什么区别?

Feign

openFiegn

Feign是SpringCloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务

OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

三、代码实现:

1、POM文件引入依赖:

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

2、添加注解@EnableFeignClients开启openFeign功能

@SpringBootApplication
@EnableFeignClients
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

3、 新建openFeign接口

新建一个openFeign接口,使用@FeignClient注解标注,如下

@FeignClient("stores")
public interface StoreClient {@RequestMapping(method = RequestMethod.GET, value = "/stores")List<Store> getStores();@RequestMapping(method = RequestMethod.GET, value = "/stores")Page<Store> getStores(Pageable pageable);@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")Store update(@PathVariable("storeId") Long storeId, Store store);@RequestMapping(method = RequestMethod.DELETE, value = "/stores/{storeId:\\d+}")void delete(@PathVariable Long storeId);
}

3、openFeign如何传参

1. 传递JSON数据

如果是 POST 请求,而且是对象集合等参数,在Spring Boot 中通过@RequestBody标识入参

@PostMapping("createOrder")
public String createOrder(@RequestBody Order order ){System.out.println(order);return "ok";
} 

2. POJO表单传参

Spring Cloud OpenFeign 提供了一个等效的注释,它 用于将 POJO 或 Map 参数注释为查询参数映射。@SpringQueryMap

Order createOrder(@SpringQueryMap Order order);

下图是官方给出的实例

// Params.java
public class Params {private String param1;private String param2;// [Getters and setters omitted for brevity]
}

以下假装客户端通过注释使用该类:Params@SpringQueryMap

@FeignClient("demo")
public interface DemoTemplate {@GetMapping(path = "/demo")String demoEndpoint(@SpringQueryMap Params params);
}

编辑3.URL中携带参数

通过 URL 传参数,GET 请求,参数列表使用@PathVariable(“”)

服务提供者代码如下:

@RestController
@RequestMapping("/openfeign/orderprovider")
public class OpenFeignOrderProviderController {@GetMapping("/getOrder/{id}")public String getOrder(@PathVariable("id")Integer id){return "accept one msg id="+id;
}

consumer消费者openFeign接口如下:

@FeignClient(value = "openFeign-orderprovider")
public interface OpenFeignService {@GetMapping("/openfeign/orderprovider/getOrder/{id}")String getOrder(@PathVariable("id")Integer id);
}

4、超时如何处理

ReadTimeout: 值的是建立链接所用的时间,适用于网络状况正常的情况下, 两端链接所用的时间

ConectTimeout: 指的是建立链接后从服务器读取可用资源所用的时间

openFeign设置超时时间非常简单,只需要在配置文件中配置,如下:

feign:client:config:## default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间default:connectTimeout: 1000readTimeout: 1000

5、Feign logging

为每个创建的 Feign 客户端创建一个记录器。默认情况下,记录器的名称是用于创建 Feign 客户端的接口的完整类名。日志记录仅响应级别:DEBUG。

openFeign的日志级别如下:

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

配置方式:

1. 配置文件application.yml:

logging.level.project.user.UserClient: DEBUG

2.自定义一个配置类,在其中设置日志级别

@Configuration
public class FooConfiguration {@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}

6、对@RefreshScope支持

如果启用了 Feign 客户端刷新,则使用以下命令创建每个 Feign 客户端:

  • feign.Request.Options作为刷新范围的 Bean。这意味着像connectTimeout and readTimeout 等属性可以针对任何 Feign 客户端实例刷新。

  • 在 下换行的网址org.springframework.cloud.openfeign.RefreshableUrl。这意味着 Feign 客户端的 URL(如果已定义)spring.cloud.openfeign.client.config.{feignName}.url 属性,可以针对任何 Feign 客户端实例刷新。

可以通过 刷新这些属性。POST /actuator/refresh

默认情况下,Feign 客户端中的刷新行为处于禁用状态。使用以下属性启用刷新行为:

spring.cloud.openfeign.client.refresh-enabled=true

7、假请求/响应压缩

您可以考虑为您的启用请求或响应 GZIP 压缩 佯装请求。您可以通过启用以下属性之一来执行此操作:

spring.cloud.openfeign.compression.request.enabled=true
spring.cloud.openfeign.compression.response.enabled=true

假请求压缩为您提供的设置类似于您可能为 Web 服务器设置的设置:

spring.cloud.openfeign.compression.request.enabled=true
spring.cloud.openfeign.compression.request.mime-types=text/xml,application/xml,application/json
spring.cloud.openfeign.compression.request.min-request-size=2048

这些属性允许您选择压缩媒体类型和最小请求阈值长度。

相关文章:

Springcloud OpenFeign 详解

一、概述OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解&#xff0c;整合了hystrix&#xff0c;同时&#xff0c;可以和Eureka和ribbon配合使用&#xff0c;如RequestMapping等等。OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口&#xf…...

软件测试期末

考原题就是爽 软件测试技术 知识点整理 https://wenku.baidu.com/view/524c900f4b2fb4daa58da0116c175f0e7cd11913.html 关键知识点 https://www.cnblogs.com/whylaughing/category/813559.html?page1 边界值法不选择无效数据 边界值分析法的基本思想 选取正好等于&am…...

关于Java的深拷贝和浅拷贝

文章目录1.拷贝的引入1.1引用拷贝1.2对象拷贝2.深拷贝与浅拷贝2.1浅拷贝2.2深拷贝1.拷贝的引入 1.1引用拷贝 创建一个指向对象的引用变量的拷贝 Teacher teacher new Teacher("Taylor",26); Teacher otherteacher teacher; System.out.println(teacher); System…...

固定值电阻的检测方法总结

🏡《总目录》 目录 1,概述2,测量方法3,检测方法3.1,读值3.2,测量3.3,排故4,总结1,概述 本文简单总结固定值电阻的测量与检查方法要点和注意事项。 2,测量方法 对于固定值电阻的测量来讲,直接将万用表红黑表笔分别插入到如下图所示的红色和黑色接线端。然后将万用表…...

打印机相关

打印机相关 打印机协议 ipp,printer-job-language,lpd协议。他们的默认端口分别是631,9100和515. printer-job-language(RAW协议) 9100端口的printer-job-language,又称为RAW协议。目前遇到的问题是,此端口发送数据,打印机直接打印,除非发送正确的printer-job-lan…...

入门力扣自学笔记235 C++ (题目编号:2347)

2347. 最好的扑克手牌 题目&#xff1a; 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌&#xff0c;第 i 张牌大小为 ranks[i] &#xff0c;花色为 suits[i] 。 下述是从好到坏你可能持有的 手牌类型 &#xff1a; "Flush"&#xff1a;同花&…...

k8s-二进制部署

文章目录一、环境二、步骤1、安装cfssl工具2、部署etcd集群3、在node节点安装docker组件4、安装flannel组件部署master节点组件部署node节点部署kube-proxy组件三、测试一、环境 角色服务器地址组件master192.168.174.140kube-apiserver&#xff0c;kube-controller-manager&a…...

前缀和差分(C/C++)

目录 1. 前缀和的定义 2. 一维前缀和 2.1 计算公式 2.2 用途 2.3 小试牛刀 3. 二维前缀和 3.1 用途 1. 前缀和的定义 对于一个给定的数列A&#xff0c;他的前缀和数中 S 中 S[ i ] 表示从第一个元素到第 i 个元素的总和。 如下图&#xff1a;绿色区域的和就是前缀和数组…...

回文子串的数量[寻找回文子串的完整思路过程]

寻找回文子串的完整思路过程前言一、回文串的数量二、动态规划1、完整思考过程2、go总结参考文献前言 回文字符串&#xff0c;就是从左遍历和从右遍历的字符是相同顺序的&#xff0c;转换一下&#xff0c;就是该字符串是对称的。寻找回文子串面临两个直接的问题&#xff0c;1-…...

CCNP350-401学习笔记(301-350题)

301、Drag and drop the virtual component from the left onto their descriptions on the right. 302、Which two actions, when applied in the LAN network segment, will facilitate Layer 3 CAPWAP discovery for lightweight AP? (Choose two.)A. Utilize DHCP option …...

【LeetCode】No.225. 用队列实现栈 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/implement-stack-using-queues/ 1. 题目介绍&#xff08;225. 用队列实现栈&#xff09; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、t…...

45个写规范代码的小技巧

目录 1、规范命名 2、规范代码格式 3、写好代码注释 4、try catch 内部代码抽成一个方法 5、方法别太长 6、抽取重复代码 7、多用return 8、if条件表达式不要太复杂 9、优雅地参数校验 10、统一返回值 11、统一异常处理 12、尽量不传递null值 13、尽量不返回null值…...

MindFusion Diagramming for Java, 最新版 Crack

Diagramming for Java, V4.6.1 A unique Java Swing library for any type of flowchart.您需要的每一个图表功能 图表、方案、图形、网络、算法、树、图表 - 所有这些都是使用 MindFusion Diagramming for Java 工具快速轻松地构建的。结果令人着迷。 Java Dagram 库&#xff…...

中间件安全—Apache常见漏洞

中间件安全—Apache常见漏洞1.Apache常见漏洞1.1.Apache介绍1.2.Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09;1.2.1.漏洞介绍1.2.2.漏洞环境1.2.2.1.运行漏洞环境1.2.2.2.访问漏洞环境1.2.3.漏洞复现1.2.3.1.拦截1.2.3.2.添加换行1.2.3.3.访问文件1.3.Apa…...

Spring IOC 容器 Bean 加载过程

Spring IOC 容器 Bean 加载过程 Spring 对于我们所有的类对象进行了统一抽象&#xff0c;抽象为 BeanDefinition &#xff0c;即 Bean 的定义&#xff0c;其中定义了类的全限定类名、加载机制、初始化方式、作用域等信息&#xff0c;用于对我们要自动装配的类进行生成。 Sprin…...

【DRF】Django Rest Framework(5.DRF中的通用视图类-GenericAPIView方法说明与使用说明)

1. GenericAPIView [通用视图类]&#xff0c;概述 继承自 APIView增加了操作序列化器和数据库查询的方法&#xff0c;作用是为下面Mixin扩展类的执行提供方法支持。通常在使用时&#xff0c;可搭配一个或者多个Mixin扩展类源码 当我们查看 GenericAPIView 的源码时&#xff0c…...

STM32 OTA应用开发——自制BootLoader

STM32 OTA应用开发——自制BootLoader 目录STM32 OTA应用开发——自制BootLoader前言1 环境搭建2 BootLoader工作原理以及常见分区介绍3 BootLoader的制作4 烧录下载配置5 运行测试结束语前言 什么是OTA&#xff1f; 百度百科&#xff1a;空中下载技术&#xff08;Over-the-Ai…...

时域和频域的简单理解

目录文章背景结论举例说明说回频域连续或离散总结文章背景 时域和频域在傅里叶变换和拉普拉斯变换&#xff0c;z变换中经常提到的高频词。本文的重点就是想说明怎么理解 “频域” 这个名词。 结论 频域就是一个信号 所有组成频率的取值范围的集合 举例说明 以大家从中小学开…...

华为OD机试 - 第 K 个最小码值的字母 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...

离散数学笔记_第一章:逻辑和证明(1)

1.1命题逻辑1.1.1 命题 1.1.2 逻辑运算符 定义1&#xff1a; 否定联结词定义2&#xff1a; 合取联结词定义3&#xff1a; 析取联结词定义4&#xff1a; 异或联结词1.1.3 条件语句 定义5&#xff1a; 条件语句定义6&#xff1a; 双条件语句1.1.1 命题 1.命题&#xff1a;是…...

TrollInstallerX技术方案解析与实践指南:iOS 14-16.6.1 TrollStore部署全攻略

TrollInstallerX技术方案解析与实践指南&#xff1a;iOS 14-16.6.1 TrollStore部署全攻略 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款针对iOS…...

ai赋能vue开发,让快马平台智能生成数据可视化仪表盘

最近在做一个数据可视化项目&#xff0c;正好体验了用AI辅助Vue3开发的全流程。不得不说&#xff0c;现在的AI工具确实让前端开发效率提升了不少。下面分享下我是如何通过InsCode(快马)平台快速实现一个智能数据仪表盘的。 需求分析与技术选型 首先需要明确仪表盘的核心功能&am…...

Granite-4.0-H-350M在数学建模竞赛中的应用:算法优化

Granite-4.0-H-350M在数学建模竞赛中的应用&#xff1a;算法优化 1. 数学建模竞赛中的真实痛点 数学建模竞赛对参赛者来说从来都不是轻松的任务。从拿到题目到提交最终报告&#xff0c;通常只有短短几天时间&#xff0c;而在这有限的时间里&#xff0c;团队需要完成问题理解、…...

S2-Pro与JDK1.8环境适配:企业老旧系统集成AI能力指南

S2-Pro与JDK1.8环境适配&#xff1a;企业老旧系统集成AI能力指南 1. 引言 "我们的核心业务系统还在用JDK1.8&#xff0c;能接入最新的AI能力吗&#xff1f;"这是很多技术负责人面临的现实困境。据统计&#xff0c;全球仍有超过65%的企业应用运行在Java 8环境中&…...

OpenClaw教学应用:Qwen3-4B自动批改编程作业实践

OpenClaw教学应用&#xff1a;Qwen3-4B自动批改编程作业实践 1. 为什么需要自动化作业批改&#xff1f; 作为一名计算机课程助教&#xff0c;我每周需要手动批改近百份学生作业。这个过程不仅耗时&#xff0c;还容易因疲劳导致评分标准不一致。最头疼的是基础语法错误检查——…...

Gin框架日志实战:从内置组件到logrus高级集成

1. Gin框架日志系统入门指南 刚接触Gin框架时&#xff0c;很多人都会好奇那些自动打印在控制台的调试信息是从哪来的。其实这就是Gin内置的Logger中间件在发挥作用。当你使用gin.Default()创建路由时&#xff0c;它已经默默帮你加载了两个关键组件&#xff1a;Logger负责请求日…...

SDMatte效果深度评测:复杂场景下的高精度图像抠图作品展示

SDMatte效果深度评测&#xff1a;复杂场景下的高精度图像抠图作品展示 1. 开篇&#xff1a;当AI遇见精细抠图 抠图这件事&#xff0c;过去一直是设计师的噩梦。记得我第一次尝试用传统工具抠取宠物毛发时&#xff0c;整整花了三小时&#xff0c;结果还是像被狗啃过一样。直到…...

多模态扩展:OpenClaw调用Qwen3-32B实现截图内容分析

多模态扩展&#xff1a;OpenClaw调用Qwen3-32B实现截图内容分析 1. 为什么需要截图内容分析能力 去年我在整理技术文档时&#xff0c;经常遇到这样的场景&#xff1a;某个软件界面的配置项需要记录下来&#xff0c;但手动抄写既费时又容易出错。当时我尝试过各种OCR工具&…...

海思SS524/SS522系列SDK编译实战:从零构建DVR开发环境

1. 海思SS524/SS522芯片与DVR开发入门 第一次接触海思SS524/SS522系列芯片时&#xff0c;我被它强大的视频处理能力震撼到了。这颗芯片简直就是为DVR产品量身定制的&#xff0c;特别是当你需要处理多路高清视频流时&#xff0c;它的优势就更加明显。SS524和SS522虽然型号不同&a…...

OpenClaw对接Qwen3.5-9B实战:5步完成本地AI助手部署

OpenClaw对接Qwen3.5-9B实战&#xff1a;5步完成本地AI助手部署 1. 为什么选择OpenClawQwen3.5-9B组合&#xff1f; 去年冬天第一次听说OpenClaw时&#xff0c;我正在为重复性的文件整理工作头疼。作为技术博主&#xff0c;每天要处理几十个Markdown草稿、截图和参考文献&…...