2

我有一个应用程序将一些操作委托给 celery 任务。根据某些参数,操作必须由不同的工作人员执行。我考虑过使用队列来实现这一点。我的想法如下:

  1. 客户端请求来自特定消息的操作queue1
  2. 如果worker1(专门负责queue1)已经处于活动状态,它将处理请求
  3. 如果没有工人在听queue1,一个包罗万象的工人(worker-main)将实例化worker1。该请求将被转发到worker1.
  4. worker1一段时间后会自行关闭而不被使用

我对芹菜的了解有限,我有几个问题。

  1. 我如何worker-main在芹菜中实施?:这是一个监听所有队列的工作人员,但优先级低于任何其他工作人员。也就是说,只有当请求没有被任何其他工作人员接受时,它才会起作用。
  2. 如何woker-main创建worker1一旦创建worker1者,必须与 关联queue1,优先级高于worker-main?
  3. 可以将请求转发worker-mainworker1吗?回复应直接发送给客户端。
  4. 可以worker1自行关闭吗?

您可以在下图中看到我尝试实现的架构的图形描述:

多人

4

1 回答 1

1

您可以在顺序工作流中将“worker main”和“worker1”链接在一起,以便“worker main”始终将作业作为第 1 步处理,但如果检测到“worker1”已经启动,则简单地返回并且不执行任何操作。

所以任务首先点击“worker main”,“worker main”检查worker1正在运行的服务器的正常运行,如果该服务器没有启动,则将其拉起,等待它完全启动然后返回。这是我测试的概念证明,以了解链接如何在 Celery 中工作以创建顺序工作流,具有更多实际经验的人可能有更好的解决方案。它还包含错误处理,以防万一让工作人员失败,我想在你的情况下。

请注意,此方法中没有队列的概念。此外,你可以给worker1和worker2不同的方法名,而不是区分参数,客户端可以解析参数,然后选择celery方法执行。

于 2012-11-28T01:41:07.930 回答