openfeign-一些配置

之前整理过一篇 openfeign的快速使用。openfeign简化服务间调用-笔记-CSDN博客

今天补充一下一些个性化配置。

一 日志:

默认的openfeign不输出日志,想看日志需要单独配置下。

日志级别

public static enum Level {NONE,BASIC,HEADERS,FULL;private Level() {}}

日志级别有以上枚举,测试选个FULL。

  • NONE: 不记录任何日志,是 OpenFeign 默认日志级别(性能最佳,适用于生产环境)。
  • BASIC: 仅记录请求方法、URL、响应状态码、执行时间(适用于生产环境追踪问题)。
  • HEADERS: 在记录 BASIC 级别的基础上,记录请求和响应的 header 头部信息。
  • FULL: 记录请求和响应的 header、body 和元数据(适用于开发和测试环境定位问题)

 配置

 新建一个配置文件,注意使用注解@Configuration是全局配置

package org.tuling.tlmalluser.config;import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;//@Configuration 使用@Configuration是全局配置
public class FeignConfig {@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}

feign调用方法configuration增加刚才的配置 

package org.tuling.tlmalluser.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.tuling.tlmallcommon.Result;
import org.tuling.tlmalluser.config.FeignConfig;@FeignClient(name = "tlmall-order01",configuration = FeignConfig.class)
public interface OrderServiceFeignClient {@GetMapping(value = "/order/getOrder")Result<?> getorder(@RequestParam("userId") String userId);
}

测试代码:

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController  {private Logger log = LoggerFactory.getLogger(getClass());
//    @Autowired
//    private RestTemplate restTemplate;@Autowiredprivate OrderServiceFeignClient orderService;@RequestMapping(value = "/getOrder")public Result<?> getOrderByUserId(@RequestParam("userId") String userId) {log.info("根据userId:"+userId+"查询订单信息");// 方式1:restTemplate调用,url写死//String url = "http://localhost:8060/order/getOrder?userId="+userId;//方式2:利用@LoadBalanced,restTemplate需要添加@LoadBalanced注解
//        String url = "http://tlmall-order01/order/getOrder?userId="+userId;
//        Result result = restTemplate.getForObject(url,Result.class);//方式3:openfeignResult result = orderService.getorder(userId);return result;}
}

调整下日志级别:feign默认是debug,修改application.yml

logging:level:org.tuling.tlmalluser.feign: debug

调用:

看日志输出

也可以配置文件实现

二 超时时间

官网介绍

1.3. Timeout Handling

We can configure timeouts on both the default and the named client. OpenFeign works with two timeout parameters:

  • connectTimeout prevents blocking the caller due to the long server processing time.

  • readTimeout is applied from the time of connection establishment and is triggered when returning the response takes too long.

 代码配置

通过 Options 可以配置连接超时时间和读取超时时间。

package org.tuling.tlmalluser.config;import feign.Logger;
import feign.Request;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;//@Configuration 使用@Configuration是全局配置
public class FeignConfig {@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}/*** 超时时间配置*/@Beanpublic Request.Options options(){return new Request.Options(2000,1000);}
}

order 测试类增加耗时

Thread.sleep(3000);

重启order模块,user 模块。调用测试:

java.net.SocketTimeoutException: Read timed out
    at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:288) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:314) ~[na:na]

配置文件

spring:application:name: tlmall-usercloud:nacos:config:server-addr: 127.0.0.1:8848username: bohupassword: 123456openfeign:client:config:default:# 日志级别loggerLevel: basic# 超时设置 1.5 秒超时connectTimeout: 1500readTimeout: 1500

注意,我测试用的版本是springboot 3, 网上之前老版本的不生效。

原码在org.springframework.cloud.openfeign.FeignClientProperties

@ConfigurationProperties("spring.cloud.openfeign.client")
public class FeignClientProperties {private boolean defaultToProperties = true;private String defaultConfig = "default";private Map<String, FeignClientProperties.FeignClientConfiguration> config = new HashMap();private boolean decodeSlash = true;public FeignClientProperties() {}

 三 自定义拦截器

public class CustomFeignInterceptor implements RequestInterceptor {Logger logger = LoggerFactory.getLogger(this.getClass());@Overridepublic void apply(RequestTemplate requestTemplate) {String testInfo = UUID.randomUUID().toString();requestTemplate.header("test_info", testInfo);logger.info("feign拦截器,info:{}",testInfo);}
}
openfeign:client:config:default:# 日志级别loggerLevel: basic# 超时设置 1.5 秒超时connectTimeout: 5000readTimeout: 5000request-interceptors: org.tuling.tlmalluser.interceptor.CustomFeignInterceptor

调用下接口,能看到拦截器日志。拦截器还是要结合具体业务来看。 

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

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

相关文章

【回溯】LeetCode经典题目总结:组合、排列、子集、分割、N皇后、单词搜索

回溯 组合问题组合总和全排列子集分割回文串N皇后电话号码的字母组合单词搜索括号生成 组合问题 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 树形结构&#xff1…

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时&#xff0c;默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点&#xff0c;但在某些设备或软件上可能存在兼容性问题。因此&#xff0c;将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

【实战示例】面向对象的需求建模

前言 博主准备写一个以面向对象为核心思想的软件需求建模、领域建模的系列&#xff0c;总结一整套可落地的DDD的打法&#xff0c;前面几篇文章论述了如何进行面向对象的需求建模&#xff0c;本文将以一个简单的购物商城的需求来演示如何进行面向对象的需求建模。 面向对象的需…

04-微服务02

我们将黑马商城拆分为5个微服务&#xff1a; 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口&#xff0c;相信大家在与前端联调的时候发现了一些问题&#xff1a; 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址…

【MyBatis 核心工作机制】注解式开发与动态代理原理

有很多朋友可能已经在开发中熟练使用 MyBatis 或者刚开始学习 MyBatis&#xff0c;对于它的一些工作机制不太了解。“咦&#xff0c;怎么写几个注解&#xff0c;写几个配置文件&#xff0c;就能实现这些效果呢&#xff0c;好神奇呀&#xff01;”当你看完这篇博客之后&#xf…

Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤

一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网&#xff0c;下载 Node.js&#xff0c;上面有好几种下载方式&#xff0c;文中下载的是 zip 压缩包。 如图&…

Element-plus自动导入

安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js&#xff0c;把两个插件添加入即可&#xff0c;注意:不是覆盖原有配置 Vite // vite.config.js import { define…

大模型:OneFitsAll、Time - LLM、LLaTA

LLM数据集:ETT、Illness、Weather ETT、Illness、Weather在上述提到的论文中都是用于时间序列预测研究的真实世界数据集,以下是对它们的具体介绍: ETT数据集 内容:ETT是电力变压器温度(Electric Transformer Temperature)数据集,通常包含电力变压器在不同时间点的温度…

Ardunio BLE keyboard 库的使用

为了开发一个 ardunio 的蓝牙选歌器&#xff0c;网络上普遍推荐使用&#xff1a; https://github.com/T-vK/ESP32-BLE-Keyboard 结果搞了好几天&#xff0c;就是不行。最后发现&#xff0c;下面两点非常重要&#xff1a; 使用 NimBle-ardunio 库这个库目前是2.1.2 &#xff…

客户案例:基于慧集通平台集成打通小满CRM+金蝶云星空+钉钉

一、引言 本案例原型公司是一家生物科技公司&#xff0c;公司自开创以来专注于体外诊断生物活性原材料的研究、生产、销售和服务&#xff0c;致力于为全球体外诊断试剂生产企业提供领先且具有竞争力的核心原料和相关辅助产品服务。公司以卓越的产品和优质的服务赢得了客户的广…

基于FISCO BCOS的电子签章系统

概述 本项目致力于构建一个安全、高效且功能完备的电子印章系统&#xff0c;通过整合区块链技术与传统数据库管理&#xff0c;为用户提供了可靠的电子签章解决方案&#xff0c;有效应对传统电子签章系统的数据安全隐患&#xff0c;满足企业和个人在数字化办公环境下对电子文档…

【2025最新计算机毕业设计】基于SpringBoot+Vue在线考试系统(源码包运行)【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

如何设置Edge浏览器访问软件

使用Edge浏览器访问分销ERP A\V系列软件时会出现各种报错&#xff0c;如何设置Edge浏览器使其正常访问&#xff0c;请看下面的具体操作。 一、打开Edge浏览器&#xff0c;点击右上角的 设置及其他&#xff0c;如图&#xff1a; 二、在弹出界面中&#xff0c;点击 扩展&#xff…

[创业之路-222]:波士顿矩阵与GE矩阵在业务组合选中作用、优缺点比较

目录 一、波士顿矩阵 1、基本原理 2、各象限产品的定义及战略对策 3、应用 4、优点与局限性 二、技术成熟度模型与产品生命周期模型的配对 1、技术成熟度模型 2、产品生命周期模型 3、技术成熟度模型与产品生命周期模型的配对 三、产品生命周期与产品类型的对应关系 …

计算机图形学知识点汇总

一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中&#xff0c;“形”指形体或形状&#xff0c;存在于客观世界和虚拟世界&#xff0c;它的本质是“表示”&#xff1b;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面&#xff0c;用于表达…

Tomcat介绍、下载安装、使用(部署项目)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

2024.12.29(进程线程实现并发服务器)

作业 多进程多线程并发服务器实现一遍提交。 服务器 #include <myhead.h> #define PORT 12345 #define IP "192.168.124.123"void *fun(void *fd) {int newfd *(int *)fd;char buff[1024];while(1){int res recv(newfd,buff,sizeof(buff),0);if(res 0){p…

docker django uwsgi 报错记录

这个配置中是能够正常进行网页访问的&#xff0c;能够查看网页 [uwsgi] chdir /home/luichun/lc/Pyfile/PyCursor/app module app.wsgi:application plugin-dir /usr/lib/uwsgi/plugins plugins python311 env TZAsia/Shanghai socket-timeout 60 websocket-ma…

初学STM32 ---高级定时器互补输出带死区控制

互补输出&#xff0c;还带死区控制&#xff0c;什么意思&#xff1f; 带死区控制的互补输出应用之H桥 捕获/比较通道的输出部分&#xff08;通道1至3&#xff09; 死区时间计算 举个栗子&#xff08;F1为例&#xff09;&#xff1a;DTG[7:0]250&#xff0c;250即二进制&#x…

保护眼睛的小工具

每天盯着电脑和手机&#xff0c;眼睛真的吃不消&#xff0c;分享一些有用的小工具。 只说一下我使用的工具&#xff0c;类似的工具有很多&#xff0c;萝卜青菜各有所爱。 定时提醒 类似闹钟&#xff0c;定时在屏幕上出现提示。有倒计时功能&#xff0c;时间可以自由设定。 wi…