springcloud org.apache.catalina.connector.ClientAbortException: java.io.IOException
今天产品测试同事在测试平台上测出了一个bug。就是在学习项目中添加一场考试的时候,添加不成功。
于是我先去查看考试微服务的报错信息,并在本地环境复现,确实存在这样的bug,如下:
因为该接口是提供给另外一个服务调用的,所以初步判断是接口业务逻辑处理时间长导致的超时。
产品的技术栈是springcloud,在网管gateway中有各个子服务的路由转发,这里是前端跟后端建立的连接,如果gatewaay超时,则会响应给前端504。但这里前端响应的是后端提供的错误码。
所以应该是服务消费方出了问题,查看服务消费方的日志,如下:
确实显示的也是请求超时问题。
在微服务中远程调用都是基于ribbon进行http请求调用的,所以在服务消费方添加了如下配置,设置超时时间:
1 2 3 | ribbon: ReadTimeout: 60000 ConnectTimeout: 60000 |
再次调用就Ok了。
当然,服务提供方首先要保证自己提供的接口业务处理时长不能过长。
减少处理时长可以有如下常用方法:
- 如果有多个sql需要执行,想办法整成一个sql,减少跟数据库的交互;
- 对应的sql也需要加上需要的索引,减少sql执行时长;
- 比较耗时的业务逻辑,又不需要响应给服务消费方,可以采用异步io非阻塞的办法,即开始新线程进行处理。
标签:
readtime out
, springcloud
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述