我们使用 RabbitMQ 作为消息队列,使用 Celery 作为任务队列,我正在尝试理解队列。
有人可以向我解释一下任务队列和消息队列之间的操作差异吗?
到目前为止,我知道消息队列将用于实际数据,例如文本消息或日志片段。它被放置在消息队列中,以便工作人员可以收集它并对其进行处理,无论是解析、存储等。
任务队列部分让我感到困惑,不确定为什么、何时或会做什么?
我认为工作者(又称任务?)会不断轮询消息队列以查找要做的事情,那么为什么会有任务队列呢?
答案1
不完全是,但很接近。 RabbitMQ 中的任务队列更类似于任务调度程序,如 cron 或 Windows 任务调度程序。
工作队列(又称任务队列)背后的主要思想是避免立即执行资源密集型任务并等待其完成。相反,我们将任务安排在稍后执行。我们将任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行该作业。当您运行许多工作进程时,任务将在它们之间共享。
RabbitMQ 是一个消息代理,因此有这个术语。因此,从操作和功能上讲,两者实际上没有太大区别。一个用于消息,另一个用于任务/作业。唯一真正的区别是,消息通常旨在尽快处理(因此从队列中清除),而任务通常安排在特定时间,因此会“排队”一段时间。不过,在系统管理方面,您可能不必太担心这个区别。