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实现远程调用?
- 引入OpenFeign和SpringCloudLoadBalancer依赖
- 利用@EnableFeignClients:注解开启OpenFeign功能
- 编写FeignClient
4.2 如何配置OpenFeign的连接池?
- 引入http客户端依赖,例如OKHttp、HttpClient
- 配置yaml文件,打开OpenFeign连接池开关
4.3 OpenFeign使用的最佳实践方式是什么?
由服务提供者编写独立module,将FeignClient及DTO抽取
4.4 如何配置OpenFeign输出日志的级别?
- 声明类型为Logger.Level的Bean
- 在@FeignClient或@EnableFeignClients注解上使用(@EnableFeignclients(defaultConfiguration DefaultFeignConfig.class))
相关文章:

SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出
目录 1 OpenFeign连接池 1.1 常见连接类型 1.2 连接池使用方法 1.2.1 引入依赖 1.2.2 开启连接池功能 1.2.3 配置完成,重启实例即可,底层将更改设置。 2 OpenFeign最佳使用方法 2.1 每个微服务都是单独的project,内部有三个独立模块 …...
跨链协议中Cosmos IBC、Polkadot/XCM、Celer Network的区别以及用途
跨链协议是实现不同区块链之间通信和价值转移的关键技术。Cosmos IBC、Polkadot/XCM 和 Celer Network 是三个在跨链领域内具有代表性的协议,它们各自有着独特的设计理念和应用场景。下面是这三个协议的详细对比: Cosmos IBC (Inter-Blockchain Communi…...

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

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

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

线上观看人次2万+!「飞天技术沙龙-CentOS 迁移替换专场」北京站圆满结束
5 月 29 日,阿里云联合龙蜥社区共同举办的「飞天技术沙龙-CentOS 迁移替换专场」于北京圆满结束,在线观看人次 2 万。本次活动现场汇聚了来自浪潮信息、Intel、龙芯、统信软件、红旗软件、电子五所等多家操作系统产业头部企业和机构,大家围绕…...
Docker基本架构概览-1
Docker基本架构概览 Docker架构 Docker采用客户端-服务器(C/S)架构,主要组件包括: Docker Client 用户与Docker交互的接口,发送命令到Docker守护进程。 Docker Daemon 运行在后台,接收并处理Docker客户端…...

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

数据集笔记:DGraph 大规模动态图数据集
dgraph-web (xinye.com) 1 数据集介绍 DGraph 是一个有向无权的动态图,包含超过 370 万个节点以及 430 万条动态边DGraph 中的节点表示金融借贷用户,有向边表示紧急联系人关系,每个节点包含脱敏后的属性特征,以及表示是否为金融…...
一些常用的git指令总结
1、git add 文件名 :该 命令可将该文件的修改添加到暂存区 比如:我刚刚修改了my_test.cpp文件,这时就可以使用git add my_test.cpp. 就将该修改添加到了暂存区。 2、git commit -m "......说明" 就是将当前的修改记录提交到本地…...

【HarmonyOS】遇见的问题汇总
一、当前编辑的页面,预览打不开 1、问题说明 当前编辑的页面,预览打不开,日志提示如下: 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…...

鸿蒙原生应用元服务开发-位置服务地理编码转化开发
(逆)地理编码转化开发 场景概述 使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力。 地理编码转化:将地理描述转化为具体坐标。 逆地理编码转化能力…...

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

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

银河麒麟操作系统通过首批软件供应链安全能力认证
麒麟软件产品供应链安全能力获双重肯定!5月30日,经北京赛迪认证中心评估,银河麒麟高级服务器操作系统V10和银河麒麟桌面操作系统V10成为首批获得软件供应链安全能力认证产品,并在操作系统类产品中名列前茅。 软件供应链安全能力评…...
【MySQL】数据库介绍|数据库分类|MySQL的基本结构|MySQL初步认识|SQL分类
目录 数据库介绍 什么是数据库 数据库分类 1.关系型数据库(RDBMS): 2.非关系型数据库: MySQL要学啥 MySQL初步认识 SQL分类 💡推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风…...

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

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...