以django和rabbit为经纪人的芹菜正在跳过每一个备用任务

以django和rabbit为经纪人的芹菜正在跳过每一个备用任务,django,rabbitmq,celery,Django,Rabbitmq,Celery,我使用芹菜为我的django应用程序做后台工作,rabbitmq作为代理。但我在生产中遇到了一个奇怪的问题。无论我启动什么任务,每个备用任务都会被跳过,没有跟踪。同样的设置在我的开发环境中运行良好 我能想到的唯一原因是,可能有另一个消费者正在使用该消息,但我无法理解。我使用默认的兔子配置文件,并创建了一个单独的用户和虚拟主机 我甚至找不到与此相关的任何东西,任何帮助都将不胜感激 这是rabbitmqctl status命令的输出 Status of node 'rabbit@ip-172-31-

我使用芹菜为我的django应用程序做后台工作,rabbitmq作为代理。但我在生产中遇到了一个奇怪的问题。无论我启动什么任务,每个备用任务都会被跳过,没有跟踪。同样的设置在我的开发环境中运行良好

我能想到的唯一原因是,可能有另一个消费者正在使用该消息,但我无法理解。我使用默认的兔子配置文件,并创建了一个单独的用户和虚拟主机

我甚至找不到与此相关的任何东西,任何帮助都将不胜感激

这是rabbitmqctl status命令的输出

Status of node 'rabbit@ip-172-31-21-247' ...
[{pid,22526},
 {running_applications,
 [{rabbitmq_management,"RabbitMQ Management Console","3.2.4"},
  {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.2.4"},
  {webmachine,"webmachine","1.10.3-rmq3.2.4-gite9359c7"},
  {mochiweb,"MochiMedia Web Server","2.7.0-rmq3.2.4-git680dba8"},
  {rabbitmq_management_agent,"RabbitMQ Management Agent","3.2.4"},
  {rabbit,"RabbitMQ","3.2.4"},
  {os_mon,"CPO  CXC 138 46","2.2.14"},
  {inets,"INETS  CXC 138 49","5.9.7"},
  {mnesia,"MNESIA  CXC 138 12","4.11"},
  {amqp_client,"RabbitMQ AMQP Client","3.2.4"},
  {xmerl,"XML parser","1.3.5"},
  {sasl,"SASL  CXC 138 11","2.3.4"},
  {stdlib,"ERTS  CXC 138 10","1.19.4"},
  {kernel,"ERTS  CXC 138 10","2.16.4"}]},
 {os,{unix,linux}},
 {erlang_version,
 "Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:2:2] [async-threads:30]        [kernel-poll:true]\n"},
 {memory,
 [{total,79683424},
  {connection_procs,1040632},
  {queue_procs,316520},
  {plugins,-381968},
  {other_proc,14279336},
  {mnesia,78184},
  {mgmt_db,1332496},
  {msg_index,41792},
  {other_ets,1129440},
  {binary,36806032},
  {code,20026884},
  {atom,703377},
  {other_system,4310699}]},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,1578945740},
 {disk_free_limit,50000000},
 {disk_free,3877945344},
 {file_descriptors,
 [{total_limit,924},
  {total_used,18},
  {sockets_limit,829},
  {sockets_used,15}]},
 {processes,[{limit,1048576},{used,341}]},
 {run_queue,0},
 {uptime,47427}]
...done.
谢谢
Anurag

检查是否有恶意工作进程在某个地方运行,该进程正在消耗作业。我建议停止所有芹菜工作(使用systemctl、supervisorctl或其他工具),在所有机器上使用pgrep芹菜检查是否有工人剩余。

我遇到过类似的问题,原因与提到的scytale相同。但它不是一个额外的恶意工作进程,而是另一个芹菜进程,连接到同一个rabbitmq uri。在这种情况下,您应该将任务路由到正确的工作人员。如果未定义任何路由规则,则所有任务都将遵循默认路由,并且由于工作人员未发现其他工作人员的任务,因此将出现关键错误,任务将被删除

以下是芹菜路径的文件


检查是否有恶意工作进程在某个地方运行,该进程正在消耗作业。我建议停止所有芹菜作业(使用
systemctl
supervisorctl
或其他任何方法),在所有机器上使用
pgrep芹菜
,检查是否有剩余工人。您好@scytale,我正在使用supervisor。我停止了所有的进程,然后手动杀死了所有的无赖芹菜工人(其中3人在那里)。现在所有的任务似乎都在执行。但现在的问题是,我如何确保这种情况永远不会发生。我总是使用主管来管理流程。我相信,如果主管本身被杀,而其子进程仍然存在,这个问题就会出现(如果我错了,请纠正我)。有没有办法确保这种情况永远不会发生?理论上,主流程应该把事情清理干净。有时候不是。您可以使用supervisor中的
killasagroup
选项立即终止所有工作进程,抢占主进程。我已经把我的建议贴出来作为答复。请接受。好的,谢谢你的帮助。我已经启用了killasgroup选项。将继续监视此问题是否再次发生。