WebFlux 项目 被访问后 访问方关闭连接 无法捕获 SocketException: Connection reset

6 天前
 heliotrope

程序 A 请求方 程序 B WebFlux 写的网关 程序 C 服务方

请求方 请求 网关时 超时设置 10 秒 网关设置超时 60 秒 服务方 响应需要 10 秒以上 出现一个问题

网关中使用 WebClient 转发请求到服务方时 当请求方因为 10 秒超时关闭链接 网关只会输出 '''reactor.netty.channel.FluxReceive [0;39m - [warn,299] - [36m[ce92646a-2, L:/192.168.101.233:9195 - R:/192.168.101.233:50853] An exception has been observed post termination, use DEBUG level to see the full stack: java.net.SocketException: Connection reset'''

还只是 WARN 网关中 WebClient 写的 doOnError doFinally 都不会触发 网关的 ErrorWebExceptionHandler 也拦截不到这个异常

相当于无法记录这个请求被请求方关闭了 整个进程被 kill 掉了一样 没法做任何操作

求教 如何捕获这个 Connection reset

635 次点击
所在节点    Java
6 条回复
chocotan
6 天前
试试 doOnCancel
heliotrope
6 天前
@chocotan 没有进...
在 WebClient 上加了不行
在 WebFilterChain 上加了也没调用
chocotan
6 天前
@heliotrope 网关 webClient 转发这一步进来没?
感觉只能在这个异常的地方加断点,看下前后的调用链
记录异常试试这个 filter: https://gist.github.com/chocotan/8d501e99a6ef1160077c1d59c43e2733
chocotan
6 天前
@chocotan onError 方法
heliotrope
6 天前
@chocotan 感谢大佬
添加这个 filter 可以进入 onCancel

WebClient 之前是已经进入到等待响应了
我是在服务方下了个断点卡在那边
D3EP
1 天前
最容易忽略的就是 onCancel 了..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1190775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX