SpringCloud之Feign调用 400 错误 之 巨坑

背景:
项目在本地环境一直在正常运行,突然测试环境大量报错,点哪错哪.
项目报错的接口是 A服务通过feign调用B服务,但是会通过两个接口调用两次B服务
查看测试环境日志发现错误如下:
这里只展示主要异常信息

feign.FeignException: status 400 reading

一开始我们被这个400的错误码误导了,一直查参数问题,但是换了所有参数后,还是报这个错,总之网上的解决办法能找的都找了.什么参数不对,序列化不对,参数过大,返回值过大,豪猪超时.甚至是服务器重启都试过,还是没能解决问题

最后的最后,直接上干货,如果上述方法你都试过,但是还是没能解决的话,那么你可能是跟我一样的问题.
直接贴干货代码:

@RequestMapping(value ="/api/getBeingProject",headers = {"Connection=close"})
List<SysProject> getBeingProject(@RequestParam String entId);

上述是自定义client中的一个远程方法,在方法上加入关键的

headers = {"Connection=close"}

这代表这次调用后,会立马关闭回收连接.

结论:
通过公司几位大佬各种跟源码分析,情况可能是这样的,
两次调用都会从连接池去拿连接
有可能是第一次调用的连接需要2秒钟
但是1秒就执行完毕了,然后第二次连接就过来了
直接拿了第一次剩下的连接去用
然后就直接把本次连接拒绝掉
feign就会报400错误,在方法上加这个headers后
本次调用后,会立马回收关闭连接,不给其他人拿到这次连接的机会,就解决了问题

彩蛋:
所有环境都没问题后,发布线上,发现线上还是会有一个接口还出现同样的问题.最后发现是这个接口请求的数据有点大,然后分批次去请求就解决了问题

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值