我目前正在使用 celery 尝试未来的任务ETA http://docs.celeryproject.org/en/latest/userguide/calling.html#eta-and-countdown功能和 Redis 代理。使用 Redis 代理的已知问题之一与可见性超时 http://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html#id1:
如果任务在可见性超时内未得到确认,该任务将被重新交付给另一个工作人员并执行。
这会导致 ETA/倒计时/重试任务出现问题,其中执行时间超过可见性超时;事实上,如果发生这种情况,它将再次执行,并且再次循环执行。
我可以设想的一些任务的预计到达时间为数周/数月。设置visibility timeout
足够大来涵盖这些任务可能是不明智的。
是否有任何方法可以使用 Redis 代理处理这些任务?我知道这个问题 https://stackoverflow.com/questions/41300209/celery-sqs-duplication-of-tasks-sqs-visibility-timeout?rq=1。更换经纪人是唯一的选择吗?
我通过以下方式使用 redis 执行此操作:
我们的客户可以安排发布一些内容。我们将版本及其执行时间存储在数据库中。
然后,我们使用 celerybeat 执行定期任务(每小时或适合您的时间),检查我们的发布表中是否有计划在下一个周期(再次每小时或适合您的时间)内安排的发布。如果找到的话,我们就会用 celery 为他们安排一个任务。这使我们能够缩短预计到达时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)