关于 python:Rabbitmq mgmt 上显示未知队列名称。使用芹菜时 | 珊瑚贝

Unknown queue names show on Rabbitmq mgmt. when using Celery


我只创建了下表中显示在 Rabbitmq 管理 Webui 中的最后 2 个队列名称:

enter

表的其余部分有类似哈希的队列,我不知道:

1
2
3
1– Who created them? (I know it is celery, but which process, task,etc.)

2– Why they are created, and what they are created for?.

我可以注意到,当推送消息的数量增加时,那些类似哈希的消息的数量也会增加。

  • .pidbox 队列用于通过向工作人员广播命令来控制工作人员:docs.celeryproject.org/en/latest/userguide/… 然后 celeryev 队列由监视器和其他想要订阅事件的工具使用。有两种类型的事件:worker 和 task。工作人员将使用与工作人员相关的事件来同步逻辑时钟。 Flower 是一个基于 Web 的监视器,它还订阅与任务相关的事件:docs.celeryproject.org/en/latest/userguide/…
  • 正如下面的答案所说,当您使用 amqp 结果后端时,名为队列的哈希是任务结果。这个后端性能不是很好,如果你想将结果存储在磁盘上,或者如果你想要 RPC 调用你应该使用新的 rpc 后端,最好使用数据库。


当使用 celery 时,Rabbitmq 被用作默认的结果后端,也用于存储失败的错误
任务(引发异常)。

每个新任务都会在服务器上创建一个新队列,其中包含数千个任务
代理可能会因队列超载而影响性能
以消极的方式。

Rabbit 中的每个队列都是一个单独的 Erlang 进程,所以如果你打算
同时保留许多结果,您可能必须增加 Erlang
进程限制,以及您的操作系统的最大文件描述符数
允许。

旧结果不会自动清理,所以我们必须告诉
兔子这样做。

下面的conf。线决定了温度的生存时间
排队。默认为 1 天

1
CELERY_AMQP_TASK_RESULT_EXPIRES = Number of seconds

或者,我们可以完全更改后端存储,而不是在 Rabbit 中进行。

1
CELERY_BACKEND =“amqp”

我们也可以忽略它:

1
CELERY_IGNORE_RESULT = True.

另外,当忽略结果时,我们也可以将错误保存起来以备后用,
这意味着失败的任务多了一个队列。

1
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True.

我不会将此问题标记为已回答,等待更好的答案。

参考:

  • 这个 SO 链接
  • 芹菜文档
  • Rabbitmq 文档
  • 请注意,Celery 3.1 中还有一个新的 RPC 后端,它为每个客户端创建一个队列
  • @asksol,感谢您的评论。谁在调用这个 RPC?每个客户端创建什么队列?
  • 有两个基于 AMQP 的结果后端:1)\\’amqp\\’ 结果后端,它将结果存储在磁盘上,每个任务使用一个队列,以便任何进程都可以检索结果;2)\\’rpc\\’ 结果后端(Celery 3.1 中的新功能)每个客户端使用一个队列来发送结果(不在磁盘上),并且只有启动任务的进程才能检索结果。您必须显式启用这些结果后端,因为默认情况下 celery 不会对返回值做任何事情。
  • 你对此有更清楚的了解吗?我正在使用 db 后端来存储结果,但我仍然看到 pidbox 队列。我的理解是,ev 队列用于使用您指出的花之类的工具进行监视。
  • 这里有同样的问题(并且不使用结果后端)… @asksol 您能否确认 pidbox 队列是否仅用于远程控制工作人员,如此处所述 docs.celeryproject.org/en/3.1/userguide/… 或有其他用途?


来源:https://www.codenong.com/20442580/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?