长时间任务完成实时通知用户?SpringBoot异步任务回调+WebSocket来搞定
前言 公司系统有一个数据导出功能,用户导出大数据量时需要等待10多分钟。当时我们采用轮询方式让用户检查任务状态,用户体验极差,用户经常重复点击导致系统压力增大。 我们花了几天时间,基于SpringBoot开发了一套异步任务结果回调和WebSocket通知系统,实现了长时间任务完成实时告知用户。现在用户提交任务后可以做其他事情,任务完成时会实时收到通知,大大提升了用户体验。 今天就把这套方案分享给大家。 问题背景 在业务系统中,经常需要处理一些耗时较长的任务,比如: 报表生成:生成包含大量数据的报表 数据导出:导出百万级数据到Excel 数据分析:复杂的计算和分析任务 文件处理:大文件的上传、转换、压缩 批量操作:批量数据处理和更新 这些任务如果采用同步方式处理,会导致: 用户等待时间过长 浏览器连接超时 服务器资源占用高 用户体验极差 系统吞吐量下降 传统的解决方案是轮询检查任务状态,但这种方式存在: 频繁请求增加服务器压力 实时性差,用户感知延迟 资源浪费,空轮询多 用户体验不佳 传统方案 vs 优化方案 传统方案:轮询检查 // 传统轮询方案 public class ....