服务之间远程Feign调用,出现参数丢失

最近有同事反映生产上,服务与服务之间远程调用,偶尔会出现 参数丢失的情况。但是,不是所有服务之间都会出现参数丢失,是固定有2个服务之间有这种情况。之前也发现过有这种情况出现,还以为是真的没传参数,这一次大家合力一起研究了下,发现是偶发情况。

打断点,压力测,网上寻求答案。终于找到了问题所在,先贴个大佬的解释 偶现的MissingServletRequestParameterException,谁动了我的参数?,解析得很详细。一查发现,果然,这两个出现参数丢失的服务里,有在异步方法中传递使用 HttpServletRequest 的情况。

总结下:

在Tomcat中,Request以及Response对象是会被 循环使用 的。如果在 异步 方法里(比如使用 @Async 等)使用 HtttpServletRequest 对象,有可能会导致请求参数不被解析,从而报错 org.springframework.web.bind.MissingServletRequestParameterException: Required long parameter 'xxx' is not present

所以,我们切记在异步方法中 不要传递使用 HttpServletRequest。

与其花许多时间和精力去凿许多浅井,不如花同样的时间和精力去凿一口深井。-- 烟沙九洲

相关推荐
无名-CODING6 分钟前
栈与队列学习笔记
java·笔记
Hui Baby9 分钟前
LSM 原理、实现及与 B+ 树的核心区别
java·linux·算法
NZT-489 分钟前
C++基础笔记(二)队列deque,queue和堆priority_queue
java·c++·笔记
Tadas-Gao14 分钟前
存储技术革命:SSD、PCIe与NVMe的创新架构设计与性能优化
java·性能优化·架构·系统架构·存储
codergjw23 分钟前
常见面试题
java
咕噜企业分发小米23 分钟前
如何平衡服务器内存使用率和系统稳定性?
java·服务器·前端
李子园的李25 分钟前
函数式编程与传统编程的对比——基于java
java
爬山算法26 分钟前
Netty(13)Netty中的事件和回调机制
java·前端·算法
南极企鹅1 小时前
Gson转义特殊字符
java