
前 vue 后 springboot jdk1.8
前端用户调后端一个生产数据的接口,这个接口要模拟延时操作,例如:要生产 100 条数据,我必须要让他 10 分钟以后才产出 100 条,但是页面请求完,不需要等待我的返回结果,可以随意操作页面其他功能,所以想请教一下,这种需求怎么满足一下,尽量不要给目前工作增加过多的代码量,如:配置 socket 建立连接等.. ps:我是一个前端的小白~
1 vchroc 2022 年 5 月 18 日 当然不是 setTimeout(fn, 10min) 可以走延迟队列 |
3 vchroc 2022 年 5 月 18 日 后端发送延迟队列,10min 后收到消息,生产 100 条数据 |
4 Neil66 2022 年 5 月 18 日 感觉跟使用消息队列一样。 1. 前端调用接口,接口把这个任务放到消息队列中并返回状态码 202Accepted 和监控的 url 地址(无需监控任务状态,可省略监控 url 地址),表示任务已经添加到队列。 2. 另一个程序轮训消息队列里的任务,处理符合条件的队列任务 3. 任务处理成功后,反写最终状态(一般在第 1 步创建任务的时候会往数据库任务表里新建一条任务数据,待处理完任务后根据消息 id 反写任务最终状态) 4. 如果需要获取任务的最终状态,前端通过另一个接口(监控的 url 地址)查询任务状态就可以。不需要获取监控任务状态这步可省略 至于楼上说的延迟队列,可能跟消息队列差不多吧,只是可以将延迟时间作为条件筛选符合条件的队列任务,供 op 参考。 对于延迟队列不了解,如有错误请各位指正。 |
5 sunwei0325 2022 年 5 月 18 日 redis zset |
6 aitaii 2022 年 5 月 18 日 via Android Redis key 十分钟消失,监听消失时间,异步处理 |
8 potatowish 2022 年 5 月 18 日 via iPhone 后端维护一个对象,包含首次调用接口的时间戳和生产出的数据,调用接口时判断当前时间与时间戳之差大于等于 10min 则返回数据。 |
9 godleon OP 谢谢大家回复 |
10 sparky 2022 年 5 月 18 日 via Android ScheduledThreadPoolExecutor |
11 buxudashi 2022 年 5 月 18 日 走 websocket 啊。让它一直在线,时间到了再返回数据呗。有了数据再关掉 websocket 。 |
12 marcojbk 2022 年 5 月 19 日 via iPhone 8 楼的和我思路一样,做两个接口,第一个接口记录开始时间,第二个查询大于设定时间的 |
13 jifengg 2022 年 5 月 19 日 说实话,楼主你的描述我看不出来你是要满足什么需求。 你是想知道怎么模拟 10 分钟后产出 100 条数据? 还是想知道怎么让前端能拿到这 100 条数据? 还是其他的? |
14 godleon OP @jifengg 详细需求就是 1.前端请求后端接口, 接口有两个操作 a.修改一个表的字段 b.生成 100 条数据插入到表里。 2.前端请求完后,我的接口是会先改表状态,然后状态改完,延迟 10 分钟生产数据,在插入到表 |
15 jifengg 2022 年 5 月 19 日 @godleon 你业务的需求我了解。我问的是,你发这个帖子的“需求”是什么,你是碰到什么问题不懂要解决呢? 你是想知道怎么模拟 10 分钟后产出 100 条数据? 还是想知道怎么让前端能拿到这 100 条数据? 还是其他的? |
16 litchinn 2022 年 5 月 19 日 单机的话 java.util.concurrent.DelayQueue 就可以 |
17 Felldeadbird 2022 年 5 月 19 日 我认为最简单做法: 1. 用户发起请求后,你和后端沟通好,保留一个浏览器一次性的全局 token 。 2. 不论用户切换到任何页面。ajax 带上 token 定时去查询上述数据。 3. 当后端数据生成完毕了,你就在前端当前页面弹出一个对话框,告知用户刚才 10 分钟前请求的东西完成了。 这里关键就是 setInterval 和 setTimeout 你怎么定义了。稳一点就用 websocket 等等技术。 |
18 bthulu 2022 年 5 月 19 日 10 分钟后需要告知前端吗? 不需要的话, 你就假装你延时生产了 100 条数据, 实际你啥都没干就行. |
19 xuelu520 2022 年 5 月 19 日 setTimeout 10 分钟后才请求接口,假装耗时 10 分钟。。。 正常是走个延时队列就行了。这要看你们后端了。 |
20 wangtian2020 2022 年 5 月 19 日 业务问题 前端接口通知后端立即执行操作 后端接口立即返回前端,“我知道了,我在做了” 界面弹窗,操作处理中,请等待约 10 分钟后刷新页面查看 |
21 mosliu 2022 年 5 月 19 日 DelayQueue 足以 |