讨论数量:
两种方案:
- 开一个特定的队列专门处理此任务,入队列时检查队列是否为空,为空则入队列,否则不入。基于这种方案的时候记得加锁
- 队列任务记录前一个任务的唯一标识,每个任务完成后再数据库中或者缓存中设置任务已完成状态,处理每个任务前检查是否有前一个任务的处理完成状态,有就处理,否则退回队列。同样有并发问题要注意
另外如果处理的顺序不重要的话,考虑后台任务在redis当中设置可用资源数,如:sysres => 5, 处理用户任务的时候将redis的资源数desc,当资源数量不够时阻塞或者返回失败,这个就看你自己了。
@我有另外一个问题。如果这个资源是用户级别的,该如何进行操作呢?
比如队列中现在有A1、A2、A3、B1、B2,这5个任务。
根据现在的资源配额,A无法执行任务,B可以执行任务,如何让队列跳过A的任务,去执行到B的任务。
我现在的做法是在先运行,然后在任务里进行判断,有运行资源就运行,没有运行资源再塞进队列,不足是会破坏顺序。
推荐文章: