最近遇到一个难以解决的问题, java 服务器端, 某个接口处理时间超过20分钟, 但是客户端请求响应超时为2分钟, 这样就会导致, 在请求这个接口的时候, 页面显示响应超时, 但是服务器端依然在进行这个请求的后续操作, 严重浪费服务器的资源. 而且, 当用户看到请求超时后, 会重新发送此请求, 以此造成恶性循环, 最终导致此接口响应时间越来越长, 服务器资源耗尽而瘫痪. 因此, 想咨询一下java web 有没有机制, 当请求超时时, 将服务器端目前有的进程结束, 或者更优雅的解决方案?
最近遇到一个难以解决的问题, java 服务器端, 某个接口处理时间超过20分钟, 但是客户端请求响应超时为2分钟, 这样就会导致, 在请求这个接口的时候, 页面显示响应超时, 但是服务器端依然在进行这个请求的后续操作, 严重浪费服务器的资源. 而且, 当用户看到请求超时后, 会重新发送此请求, 以此造成恶性循环, 最终导致此接口响应时间越来越长, 服务器资源耗尽而瘫痪. 因此, 想咨询一下java web 有没有机制, 当请求超时时, 将服务器端目前有的进程结束, 或者更优雅的解决方案?
业务做异步处理。
提交作业、查询作业。
客户端先查询作业,返回作业状态,已完成则读取处理的结果显示,未完成则提示正在处理的进度。
服务器端设置一个超时时间就行了,超时抛异常,扔掉。
楼上正解
既然这个请求要执行这么长时间,那就异步处理啊,在结果未出来时不允许再次请求
异步 回调客户端
什么操作要20分钟 这么长的反应速度 能弄成实时的 不能优化的话 建议换种方式显示吧
按你的说法,数据量大而且要进行数据合并,你们从第三方接口调来的数据会自己进行存储么?还是说直接在程序里进行合并,如果直接在程序里进行合并,数据量大的话,会内存溢出吧?
疏优于堵,为什么不拆分业务 将一些 比如日志 比如不需要实时展示的东西 做成消息队列