我希望创建一个任务,该任务将在发生错误的情况下将自身重定向到其他队列。这样做的目的是将失败的任务消息与所有任务数据一起存储,例如使用CLI将数据重定向到适当的队列或删除所有任务。但是问题是,如果我在另一个队列上运行任务,任务将被消耗,而RabbitMQ不会存储任何数据。有什么方法可以防止队列使用RabbitMQ的消息吗?
@shared_task(bind=True)
def my_task(self, arg):
try:
...
except MaxRetriesExceededError:
my_task.apply_async([arg], queue='failed_queue')
my_task.apply_async(['arg'], queue='my_queue')```
答案 0 :(得分:0)
@Lotram解决方案有效。
如果使用以下命令启动worker,则Celery不会使用RabbitMQ消息:
celery -A proj worker -Q my_queue -X failed_queue
-X
参数不允许工作人员从指定队列中消费