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