Springboot整合 Spring Cloud OpenFeign

1.OpenFeign简介

1.相比于Netflix Feign,OpenFeign支持Spring MVC注解,整合了Ribbon(springcloud在Hoxton.M2 RELEASED版本之后舍弃Ribbon。需手动引入spring-cloud-loadbalancer)和Nacos。
2.使得开发人员调用远程接口或者服务之间相互调用就像调用本地方法一样。

2.整合OpenFeign

1.引入OpenFeign依赖
<!--查看是否引入SpringCloud 版本依赖-->
<dependencyManagement><dependencies><!-- SpringCloud 版本依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--loadbalancer--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
</dependencies>
2.编写调用接口+@FeignClient
FeignClient常用属性:name:指定FeignClient的名称,项目若整合注册中心(nacos),name属性会作为服务的名称,用于服务发现。
url:可以手动指定@FeignClient调用的地址。
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration:Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现				@FeignClient标记的接口
fallbackFactory:工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path:定义当前FeignClient的统一前缀,当我们项目中配置了server.context-path,server.servlet-path时使用
@FeignClient(name = "servie-name")
public interface SystemFeignService {@PostMapping(value = "/xxx/xxxx")void updateXxxxx(@RequestBody Object object);@GetMapping(value = "/xxx/xxxx")SysUser selectXxxx(@RequestParam(value = "str") String str);@GetMapping(value = "/xxx/{key}")String getConfigKeyXxxxx(@PathVariable(value = "key") String key);
}
3.启动类添加@EnableFeignClients开启FeignCleint

在这里插入图片描述

3.OpenFeign自定义配置

1.日志配置
接口调试、查看接口响应时间等
1)全局配置,定义配置类并指定日志级别
日志级别分为4种:NONE:不记录任何日志。适用于生产(默认值)。BASIC:仅记录请求方法,URL,响应状态代码以及执行时间。适应于生产追踪问题。HEADERS:在BASIC基础上,记录请求和响应的header。FULL:记录请求和响应的header,body和元数据。注:OpenFeign的日志级别为debug,Springboot默认的级别是info级别比OpenFeign要高,所以OpenFeign日期不会输出,需要在配置文件中设置feign接口所在目录的日志级别。
logging:level:com.initial.openFeign.service: debug
@Configuration //添加@Configuration注解表明全局有效
public class FeignConfig{@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}}
日志输出:

在这里插入图片描述

2)局部配置-配置类
1.将OpenFeign日志配置类上的@Configuration 去除
2.@FeignClient接口添加 configuration = FeignConfig.class
//@Configuration //添加@Configuration注解表明全局有效
public class FeignConfig{@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}}
@FeignClient(name = "servie-name",configuration = FeignConfig.class)
public interface SystemFeignService {@PostMapping(value = "/xxx/xxxx")void updateXxxxx(@RequestBody Object object);@GetMapping(value = "/xxx/xxxx")SysUser selectXxxx(@RequestParam(value = "str") String str);@GetMapping(value = "/xxx/{key}")String getConfigKeyXxxxx(@PathVariable(value = "key") String key);
}
日志输出:

在这里插入图片描述

2)局部配置-配置文件
消费端配置文件中添加
spring:cloud:openfeign:client:config:##调用的服务名servie-name:##日志级别logger-level: FULL
2.超时时间配置
通过Options可以配置连接超时时间和读取超时时间,Options的第一个参数是连接的超时时间(ms),默认值是2s,第二个参数是请求处理的超时时间(ms),默认值是5s。
1)全局配置-配置类(局部配置不进行演示了)
@Configuration //添加@Configuration注解表明全局有效
public class FeignConfig {@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.BASIC;}@Beanpublic Request.Options feignOptions(){//这里设置请求处理超时时间为3s钟return new Request.Options(5000,3000);}
}
@FeignClient(name = "servie-name")
public interface SystemFeignService {@PostMapping(value = "/xxx/xxxx")void updateXxxxx(@RequestBody Object object);@GetMapping(value = "/xxx/xxxx")SysUser selectXxxx(@RequestParam(value = "str") String str);@GetMapping(value = "/xxx/{key}")String getConfigKeyXxxxx(@PathVariable(value = "key") String key);
}
服务端接口睡眠5s钟
try {Thread.sleep(5000);
} catch (InterruptedException e) {throw new RuntimeException(e);
}
请求处理超时报错:

在这里插入图片描述

2)局部配置-配置文件
消费端配置文件中添加
spring:cloud:openfeign:client:config:##调用的服务名servie-name:##日志级别logger-level: FULL#连接超时时间connect-timeout: 5000#连接成功后,请求处理超时时间read-timeout: 3000
请求处理超时报错:

在这里插入图片描述

3.自定义拦截器
可以处理服务调用时token的传递等。
全局配置类
@Configuration
public class FeignTokenInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {String feignUrl = requestTemplate.url();if (feignUrl.contains("/xxlJob/")) {// 处理 xxljob 调用feign接口 丢失请求头RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest()));} else {HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String token = request.getHeader(Constants.ACCESS_TOKEN_KEY);if (StringUtils.isNotEmpty(token)) {requestTemplate.header(Constants.ACCESS_TOKEN_KEY, token);}}requestTemplate.header("X-Forwarded-For", IpUtils.getIpAddr(WebUtils.getRequest().get()));}}

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

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

相关文章

威纶通触摸屏下载项目文件后,文本都变成了框框的解决办法

威纶通触摸屏下载项目文件后,文本都变成了框框的解决办法 我们在用Easy builder pro编辑某些项目的情况下,编译没问题,为什么下载到触摸屏之后,文本都变成了框框了呢? 分析:: 不能正常显示文本的原因是字体文件缺失。 解决办法: 如下图所示,在Easy builder pro软件中,…

丑萌的黏土滤镜爆火,这款APP冲到了排行榜第一

你最近是否在社交软件上看到过黏土风格图片呢&#xff1f;突出的面部线条&#xff0c;宛如橡皮一样富有弹性的质感&#xff0c;不少人都用自己的照片或者一些出名表情包进行了恶搞。而掀起这股风潮的&#xff0c;就是一款Remini的AI修图软件。 聊起AI作图&#xff0c;相信不少人…

Qt自定义QpushButton分别在c++/python中实现

//.h文件#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> #include<QMouseEvent> #include<QPropertyAnimation> #include<QResizeEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; }class Widget : public QWi…

ue引擎游戏开发笔记(38)——实现敌人接收攻击伤害,并作出反应

1.需求分析&#xff1a; 现在已经显示造成实际伤害&#xff0c;但敌人对实际伤害并未产生反馈&#xff0c;例如还击&#xff0c;或者死亡倒地等等&#xff0c;实现敌人对于受击的反馈。 2.操作实现&#xff1a; 1.思路&#xff1a;在动画蓝图中添加死亡动画&#xff0c;并通过…

ESP8266-01模块继电器制作手机APP远程遥控智能开关

资料下载地址&#xff1a; ESP8266-01模块继电器制作手机APP远程遥控智能开关 这是一款使用ESP8266-01模块继电器制作手机APP远程遥控智能开关&#xff0c;它能实现远程遥控、定时、倒计时控制。电路简单&#xff0c;适合新手入门制作&#xff0c;下图是用这个智能开关制作的小…

OpenAI 推出 GPT-4o:实现多模态 AI 交互

一、前言 OpenAI 推出了其最新的 AI 模型——GPT-4o&#xff0c;此次发布的并非 GPT-4.5 或 GPT-5&#xff0c;而是一款全新的“全模态模型(Omnimodel)”。这是一个将文本、语音和视觉能力集成到单一无缝 AI 体验中的突破性发展。 GPT-4o 于 2024 年 5 月 14 日发布&#xff0…

Ubuntu 配置Samba

Ubuntu 配置&#xff1a; 安装 Samba &#xff1a; sudo apt-get install samba添加用户并设置密码&#xff08;可与ubuntu用户密码相同方便记忆&#xff09; sudo smbpasswd -a root这里我设置的密码为123456 sudo vi /etc/samba/smb.conf注意这个共享的目录一定要存在\ho…

WSL2-Ubuntu(深度学习环境搭建)

1.在Windows的WSL2上安装Ubuntu 流程可参考&#xff1a;https://www.bilibili.com/video/BV1mX4y177dJ 注意&#xff1a;中间可能需要使用命令wsl --update更新一下wsl。 2.WSL数据迁移 按照下面流程&#xff1a;开始菜单->设置->应用->安装的应用->搜索“ubun…

Folder Icons for Mac v1.9激活版:自定义文件夹图标

在追求个性和品味的今天&#xff0c;Folder Icons for Mac 让您的Mac桌面焕然一新。支持多种格式的图片和图标文件&#xff0c;满足您不同的审美需求。同时&#xff0c;软件提供丰富的图标库和模板&#xff0c;让您在定制文件夹图标时更加得心应手。Folder Icons for Mac 不仅能…

Spring AI项目Open AI对话接口开发指导

文章目录 创建Spring AI项目配置项目pom、application文件controller接口开发接口测试 创建Spring AI项目 打开IDEA创建一个新的spring boot项目&#xff0c;填写项目名称和位置&#xff0c;类型选择maven&#xff0c;组、工件、软件包名称可以自定义&#xff0c;JDK选择17即可…

AI预测体彩排3采取878定位大底=23策略+杀断组+杀组选+杀和尾+杀和值012缩水测试5月15日预测第1弹

昨天与一位玩排3的彩友通过视频直播的形式聊了下&#xff0c;受益匪浅&#xff0c;给我提供了一些比较有价值的建议&#xff0c;比如&#xff0c;对于878的定位策略&#xff0c;方向是没问题的&#xff0c;但是8783的话&#xff0c;还是缺乏一定的命中率&#xff0c;如果87823&…

photoshop(PS)有什么快速提升工作效率的功能?或者实用功能?这里告诉你5条!

1:文件太多&#xff0c;不方便马上找到需要插入元素&#xff08;元素放入PS会发现&#xff0c;位置不知道在哪里&#xff09;&#xff0c;点击需要选中或者搭配的元素&#xff0c;ctrlV就可以快速插入目标元素的位置了&#xff01; 点击当前元素&#xff0c;选中&#xff0c;c…

U盘中毒文件变乱码?揭秘原因与高效恢复方法!

在日常使用U盘的过程中&#xff0c;有时我们会遭遇到一个非常棘手的问题——文件突然出现乱码。当你满怀期待地插入U盘&#xff0c;准备打开某个重要文件时&#xff0c;却发现文件名或内容变成了一堆无法识别的字符&#xff0c;这种心情无异于晴天霹雳。乱码文件不仅影响了我们…

微分阻尼作用的理解

先说阻尼的作用,阻尼能够缩短系统整定时间,减小系统响应的振动幅度。 1、CODESYS位置式PID(完整ST源代码) CODESYS位置式PID(完整ST源代码)_codesys pid功能块-CSDN博客文章浏览阅读1.2k次,点赞2次,收藏2次。CODESYS增量式PID完整源代码请参看下面文章链接:CODESYS增量式…

[图解]SysML和EA建模住宅安全系统-04

1 00:00:01,200 --> 00:00:04,710 我们首先来看一下需求图的一些要点 2 00:00:05,810 --> 00:00:07,080 需求图用来干什么 3 00:00:07,210 --> 00:00:12,080 用来记录文本形式的一些需求 4 00:00:12,090 --> 00:00:13,480 和需求的素材 5 00:00:14,540 --> …

南网上行通信规约报文解析软件

本文分享一个南网上行通信规约20140617 报文解析软件 下载链接: https://pan.baidu.com/s/1ngbBG-yL8ucRWLDflqzEnQ 提取码: y1de 主界面如下图所示&#xff1a; 本软件同时支持南网上行通信规约20140617-Fn查询功能 软件同时支持多种规约类型&#xff0c;如&#xff1a;国网…

基于springboot实现酒店管理系统项目【项目源码+论文说明】

基于springboot实现酒店管理系统演示 摘要 时代的发展带来了巨大的生活改变&#xff0c;很多事务从传统手工管理转变为自动管理。自动管理是利用科技的发展开发的新型管理系统&#xff0c;这类管理系统可以帮助人完成基本的繁琐的反复工作。酒店是出门的必需品&#xff0c;无论…

Kotlin扩展函数和运算符重载

扩展函数 fun String.lettersCount():Int{var count 0for(i in this){if(i.isLetter())count}return count } fun main(){val str:String "12we"println(str.lettersCount()) } 相当于直接将方法写在类里面。函数体内可以直接使用this而不用传参。 运算符重载 …

vsCode 设置上下级文件夹目录分离展示?

默认情况下&#xff0c;vsCode目录文件夹会使用/合并展示在一行&#xff0c;这样视觉上看着并不直观&#xff0c;设置目录文件分离展示方法如下&#xff1a; 1、点击左下角设置图标&#xff0c;点击setting&#xff1b; 2、搜索栏输入compact&#xff1b; 3、取消勾选第一个选…

OV SSL证书年度成本概览:确保企业级安全的经济之选

随着网络安全意识的日益增强&#xff0c;SSL证书成为了网站安全的标配&#xff0c;尤其是对于企业而言&#xff0c;选择一款既能确保数据传输安全又符合预算的证书至关重要。在众多SSL证书中&#xff0c;组织验证型&#xff08;Organization Validation&#xff0c;简称OV&…