解决SpringCloudGateway用户请求超时导致日志未记录情况

1. 问题现象:

本项目是SpringCloudGateway框架项目,测试对接时发现一种情况:调用方请求了我项目的接口,但是经过3秒之后调用方未收到任何请求,我项目也未记录到任何日志。

2. 问题排查:

分析发现,我方的接口请求了其他接口并且超时,超时时长为10秒;而调用方请求时长为3秒;所以当我方接口请求未结束时,调用方就已经请求超时了。

而根据SpringCloudGateway的底层逻辑,调用方请求超时,请求链路会收到一个cancel指令,会导致后续的Filter的then()不会往后执行,而我的日志记录操作正是放在Filter的then()中;

3. 解决方案:

  1. 调用方接口超时时长应大于我方超时时长
  2. 日志记录等不论调用是否取消的逻辑都应该放在doFinally中

    doFinally:无论是否成功或者取消都会运行
    doOnCancel:请求取消则会执行
相关推荐
Seven97几秒前
Paxos算法:如何解决分布式系统中的共识问题?
java
Ting-yu10 分钟前
SpringCloud快速入门(1)---- 微服务介绍
后端·spring·spring cloud
铁皮哥31 分钟前
【力扣题解】LeetCode 25. K 个一组翻转链表
java·数据结构·windows·python·算法·leetcode·链表
小新同学^O^34 分钟前
简单学习 --> 单例模式
java·学习·多线程
Nicander34 分钟前
Spring Boot 全局异常处理:原理与实践
spring boot·后端
Henray202438 分钟前
LRU缓存设计与实现
java·面试
庞轩px1 小时前
第八篇:Spring与微服务——从SpringBoot到SpringCloud的演进
spring boot·spring·微服务·nacos·gateway·sentinel
甲方大人请饶命1 小时前
SSM-基础
java·数据库·spring
谷雨不太卷1 小时前
Linux基础IO
java·开发语言
小新同学^O^1 小时前
简单学习 --> 文件IO
java·学习·文件io