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

SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出

目录

1 OpenFeign连接池

1.1 常见连接类型

1.2 连接池使用方法

1.2.1 引入依赖

1.2.2 开启连接池功能

1.2.3 配置完成,重启实例即可,底层将更改设置。

2 OpenFeign最佳使用方法

2.1 每个微服务都是单独的project,内部有三个独立模块

2.2 每个微服务都是一个module,一个project,内设单独api module

2.3 可根据项目的调整所使用的项目架构,选择最好的使用方法。

3 OpenFeign日志输出

3.1 关于OpenFeign中日志的默认设置

3.2 更改OpenFeign日志设置,使其输出日志

3.2.1 检查Feign所在module日志是否为debug级别

3.2.2 自定义日志级别需要声明一个类型为Logger.Level的Bean,在其中定义日志级别

4 总结

4.1 如何利用OpenFeign实现远程调用?

4.2 如何配置OpenFeign的连接池?

4.3 OpenFeign使用的最佳实践方式是什么?

4.4 如何配置OpenFeign输出日志的级别?


在OpenFeign发起远程调用时,默认是请求一次建立一次连接,然后断开,消耗资源,因此推荐使用连接池。

1 OpenFeign连接池

1.1 常见连接类型

OpenFeign对Http请求做了优雅的伪装,不过其底层发起http请求,依赖于其它的框架。这些框架可以自己选择,包括以下三种:

  • HttpURLConnection: 默认实现,不支持连接池
  • Apache HttpClient:支持连接池
  • OKHttp: 支持连接池

具体源码可以参考FeignBlockingLoadBalancerClient类中的delegate成员变量。

1.2 连接池使用方法

此处示例使用OKHttp

1.2.1 引入依赖

<!--OKHttp-->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId>
</dependency>

1.2.2 开启连接池功能

在yaml配置文件中添加

feign:okhttp:enable:true

1.2.3 配置完成,重启实例即可,底层将更改设置。

2 OpenFeign最佳使用方法

OpenFeign在实践中,尤其是FeignClient维护的过程中有两种常见的项目结构

2.1 每个微服务都是单独的project,内部有三个独立模块

每个微服务再下再建立三个模块。其中dto中存放实体类,api模块中存放接口类,biz中则是业务代码。(耦合度低,项目结构较为复杂,适合每个微服务都是一个单独的project情况,大型项目

2.2 每个微服务都是一个module,一个project,内设单独api module

第二种,是抽取的形式,将FeignClient,配置,实体等公共部分抽取为一个单独的api模块。(结构简单,耦合度高一些,适合多个微服务从属于同一个project,中小型项目

2.3 可根据项目的调整所使用的项目架构,选择最好的使用方法。

3 OpenFeign日志输出

3.1 关于OpenFeign中日志的默认设置

OpenFeign,只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

  • NONE: 不记录任何日志信息,这是默认值。
  • BASIC: 仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS: 在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL: 记录所有请求和响应的明细,包括头信息、请求体、元数据。

由于OpenFeign,默认的日志级别就是NONE,所以默认我们看不到请求日志。

3.2 更改OpenFeign日志设置,使其输出日志

3.2.1 检查Feign所在module日志是否为debug级别

首先关于项目中包(module)的基本设置,在yaml文件中检查配置(注意改为自己的包名):

logging:level:com.example:debug

3.2.2 自定义日志级别需要声明一个类型为Logger.Level的Bean,在其中定义日志级别

一般定义在api微服务模块汇总的config文件中:

定义如下类(此类后续还可以添加其他Feign配置):

public class DefaultFeignConfig {@Beanpublic Logger.Level feignLoggerLevel(){return  Logger.Level.FULL;}}

但此时这个Bean并未生效,要想配置某个FeignClient的日志,可以在@FeignClient注解中声明(不建议,建议全局使用,看下一条):

@Feignclient(value "item-service",configuration DefaultFeignConfig.class)


如果想要全局配置,让所有FeignClienta都按照这个日志配置,则需要在启动类中的@EnableFeignClients注解中声明(此时@Feignclient则不需要了,有全局即可):

@EnableFeignclients(defaultConfiguration DefaultFeignConfig.class)

4 总结

4.1 如何利用OpenFeign实现远程调用?

  1. 引入OpenFeign和SpringCloudLoadBalancer依赖
  2. 利用@EnableFeignClients:注解开启OpenFeign功能
  3. 编写FeignClient

4.2 如何配置OpenFeign的连接池?

  1. 引入http客户端依赖,例如OKHttp、HttpClient
  2. 配置yaml文件,打开OpenFeign连接池开关

4.3 OpenFeign使用的最佳实践方式是什么?


由服务提供者编写独立module,将FeignClient及DTO抽取

4.4 如何配置OpenFeign输出日志的级别?

  1. 声明类型为Logger.Level的Bean
  2. 在@FeignClient或@EnableFeignClients注解上使用(@EnableFeignclients(defaultConfiguration DefaultFeignConfig.class))

相关文章:

SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出

目录 1 OpenFeign连接池 1.1 常见连接类型 1.2 连接池使用方法 1.2.1 引入依赖 1.2.2 开启连接池功能 1.2.3 配置完成&#xff0c;重启实例即可&#xff0c;底层将更改设置。 2 OpenFeign最佳使用方法 2.1 每个微服务都是单独的project&#xff0c;内部有三个独立模块 …...

跨链协议中Cosmos IBC、Polkadot/XCM、Celer Network的区别以及用途

跨链协议是实现不同区块链之间通信和价值转移的关键技术。Cosmos IBC、Polkadot/XCM 和 Celer Network 是三个在跨链领域内具有代表性的协议&#xff0c;它们各自有着独特的设计理念和应用场景。下面是这三个协议的详细对比&#xff1a; Cosmos IBC (Inter-Blockchain Communi…...

电子画册制作与传统画册相比,有哪些优势?

在当今数字化时代&#xff0c;电子画册作为一种新兴的媒体形式&#xff0c;其制作与传统画册相比具有显著的优势。以下是对这些优势的详细探讨。 首先&#xff0c;电子画册的制作过程通常更加便捷和经济。相较于传统画册需要经历的繁琐的印刷过程&#xff0c;电子画册的制作大多…...

postman如何导入证书

1、打开postman&#xff0c;点击Settings。 2、添加证书。 3、填写要访问平台的URL路径及端口、证书文件、证书密码。 4、添加完之后即可立即调用postman。...

RocketMQ教程(八):RocketMQ的集群搭建

传送门:RocketMQ教程汇总,让你从入门到精通 集群架构 RocketMQ 的各个组件都可以搭建成集群部署,Broker 还可以搭建成主从架构,下面介绍的主要是 Broker 集群。 数据复制策略 复制策略是Broker的Master与Slave间的数据同步方式。分为同步复制与异步复制: 同步复制 消…...

线上观看人次2万+!「飞天技术沙龙-CentOS 迁移替换专场」北京站圆满结束

5 月 29 日&#xff0c;阿里云联合龙蜥社区共同举办的「飞天技术沙龙-CentOS 迁移替换专场」于北京圆满结束&#xff0c;在线观看人次 2 万。本次活动现场汇聚了来自浪潮信息、Intel、龙芯、统信软件、红旗软件、电子五所等多家操作系统产业头部企业和机构&#xff0c;大家围绕…...

Docker基本架构概览-1

Docker基本架构概览 Docker架构 Docker采用客户端-服务器&#xff08;C/S&#xff09;架构&#xff0c;主要组件包括&#xff1a; Docker Client 用户与Docker交互的接口&#xff0c;发送命令到Docker守护进程。 Docker Daemon 运行在后台&#xff0c;接收并处理Docker客户端…...

OZON云仓靠谱吗,OZON云仓垫资提货模式

在电商飞速发展的今天&#xff0c;物流仓储成为了支撑整个电商生态的重要基石。OZON云仓作为市场上新兴的仓储物流服务提供商&#xff0c;凭借其先进的技术和灵活的服务模式&#xff0c;受到了不少电商卖家和消费者的关注。但随之而来的是一系列疑问&#xff1a;OZON云仓靠谱吗…...

数据集笔记:DGraph 大规模动态图数据集

dgraph-web (xinye.com) 1 数据集介绍 DGraph 是一个有向无权的动态图&#xff0c;包含超过 370 万个节点以及 430 万条动态边DGraph 中的节点表示金融借贷用户&#xff0c;有向边表示紧急联系人关系&#xff0c;每个节点包含脱敏后的属性特征&#xff0c;以及表示是否为金融…...

一些常用的git指令总结

1、git add 文件名 &#xff1a;该 命令可将该文件的修改添加到暂存区 比如&#xff1a;我刚刚修改了my_test.cpp文件&#xff0c;这时就可以使用git add my_test.cpp. 就将该修改添加到了暂存区。 2、git commit -m "......说明" 就是将当前的修改记录提交到本地…...

【HarmonyOS】遇见的问题汇总

一、当前编辑的页面&#xff0c;预览打不开 1、问题说明 当前编辑的页面&#xff0c;预览打不开&#xff0c;日志提示如下&#xff1a; Route information is not configured for the current page. To avoid possible redirection issues, configure route information for…...

C# NX二次开发-获取圆弧中心点和半径

使用UF函数可以获取圆弧边或圆弧线中心点和半径: 1.使用 UF_CURVE_ask_arc_data: theUf.Curve.AskArcData(edge.Tag, out UFCurve.Arc arc);theUf.Curve.CreateArc(ref arc, out Tag arc_tag);double[] matrix_values new double[9];double[] vec_product new double[3];theU…...

鸿蒙原生应用元服务开发-位置服务地理编码转化开发

&#xff08;逆&#xff09;地理编码转化开发 场景概述 使用坐标描述一个位置&#xff0c;非常准确&#xff0c;但是并不直观&#xff0c;面向用户表达并不友好。系统向开发者提供了以下两种转化能力。 地理编码转化&#xff1a;将地理描述转化为具体坐标。 逆地理编码转化能力…...

【ArcGISPro SDK】构建多面体要素

结果展示 每个面构建顺序 代码 using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework;…...

leetcode够用之java语法

常用方法 Arrays.sort()排序 import java.util.Arrays;public class Main {public static void main(String[] args) {int[] numbers {9, 2, 5, 1, 7, 3};Arrays.sort(numbers);System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 5, 7, 9]} }获取str中的第…...

pdf文件怎么改变大小?在线快速压缩pdf的方法

pdf作为一种常用的文件格式&#xff0c;使用这种文件类型的好处在于不仅拥有更好的兼容性&#xff0c;还可以设置密码来保证安全性&#xff0c;防止未授权用户查看内容&#xff0c;所以现在导出文件展示都会采用这种格式的来做内容展示。当遇到pdf文件过大问题时&#xff0c;想…...

inferCNV:scRNA-seq数据推断染色体拷贝数变化

inferCNV分析简介 inferCNV用于探索肿瘤单细胞RNA-Seq 数据&#xff0c;以确定体细胞大规模染色体拷贝数改变的证据&#xff0c;例如整个染色体或大片段染色体的增益或缺失。这是通过与一组参考“正常”细胞&#xff08;这里的正常细胞可自行定义&#xff09;进行比较&#xf…...

银河麒麟操作系统通过首批软件供应链安全能力认证

麒麟软件产品供应链安全能力获双重肯定&#xff01;5月30日&#xff0c;经北京赛迪认证中心评估&#xff0c;银河麒麟高级服务器操作系统V10和银河麒麟桌面操作系统V10成为首批获得软件供应链安全能力认证产品&#xff0c;并在操作系统类产品中名列前茅。 软件供应链安全能力评…...

【MySQL】数据库介绍|数据库分类|MySQL的基本结构|MySQL初步认识|SQL分类

目录 数据库介绍 什么是数据库 数据库分类 1.关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.非关系型数据库&#xff1a; MySQL要学啥 MySQL初步认识 SQL分类 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风…...

2024年6月11日 (周二) 叶子游戏新闻

万能嗅探: 实测 网页打开 某视频号、某音、某红薯、某站&#xff0c;可以做到无水印的视频和封面下载功能哦&#xff0c;具体玩法大家自行发挥吧。 WPS免登录一键修改器: 去除烦人的登录且能正常使用 日本一首部游戏《拼图世界》上架Steam 30年PS名作日本游戏厂商日本一的首部品…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...