1. 问题现象:
本项目是SpringCloudGateway框架项目,测试对接时发现一种情况:调用方请求了我项目的接口,但是经过3秒之后调用方未收到任何请求,我项目也未记录到任何日志。
2. 问题排查:
分析发现,我方的接口请求了其他接口并且超时,超时时长为10秒;而调用方请求时长为3秒;所以当我方接口请求未结束时,调用方就已经请求超时了。
而根据SpringCloudGateway的底层逻辑,调用方请求超时,请求链路会收到一个cancel指令,会导致后续的Filter的then()不会往后执行,而我的日志记录操作正是放在Filter的then()中;

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

doFinally:无论是否成功或者取消都会运行
doOnCancel:请求取消则会执行