我正在开发一个Django应用程序,该应用程序高度依赖Celery任务调度,并使用Redis作为后端。可以将任务设置为长时间运行,也可以几秒钟/分钟运行。
我已经了解了Redis可见性超时以及调度时间增量大于可见性超时的任务的后果(我也在上一个项目中进行处理),所以我感兴趣的是是否有比我的解决方案是在需要执行“主”任务前5分钟运行另一个“帮助”任务,安排“主”任务在所需时间内运行,将任务ID存储在DB中,然后检查“主”任务。如果存储的任务ID是正在运行的任务ID,则显示“任务”。最后一部分(带有任务ID存储)是必需的,因为多次运行“ helper”任务可能会产生许多“主要”任务实例,但是使用这种方法,每个实例将具有不同的任务ID。
我真的很讨厌这种方法的声音及其工作方式,好像该任务计划从当前时间开始运行一个月,“帮助”和“主要”任务最多执行一百次。
我也知道这是一个悬而未决的问题,所以我对解决方案本身更感兴趣,而不是解决方案本身。
答案 0 :(得分:0)
我已经测试了可用的选项,我认为仅使用RabbitMQ
作为代理可以解决整个问题。
尽管这对我来说是一个可行的选择,但是缺少某些redis
配置参数(例如,池大小)会使那些使用托管服务的经纪人连接受到限制的人无法使用它。