U-D*_*DON 5 django rabbitmq celery django-celery
我在Django应用程序中运行Celery,并使用RabbitMQ作为消息代理。然而,RabbitMQ 总是这样崩溃。首先是我从 Django 得到的错误。跟踪大多不重要,因为我知道导致错误的原因,正如您将看到的。
Traceback (most recent call last):
...
File "/usr/local/lib/python2.6/dist-packages/amqplib/client_0_8/transport.py", line 85, in __init__
raise socket.error, msg
error: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)
我知道这是由于rabbit_persister.log文件损坏造成的。这是因为在我杀死与 RabbitMQ 相关的所有进程后,我运行“sudorabbitmq-server start”会出现以下崩溃:
...
starting queue recovery ...done
starting persister ...BOOT ERROR: FAILED
Reason: {{badmatch,{error,{{{badmatch,eof},
[{rabbit_persister,internal_load_snapshot,2},
{rabbit_persister,init,1},
{gen_server,init_it,6},
{proc_lib,init_p_do_apply,3}]},
{child,undefined,rabbit_persister,
{rabbit_persister,start_link,[]},
transient,100,worker,
[rabbit_persister]}}}},
[{rabbit_sup,start_child,2},
{rabbit,'-run_boot_step/1-lc$^1/1-1-',1},
{rabbit,run_boot_step,1},
{rabbit,'-start/2-lc$^0/1-0-',1},
{rabbit,start,2},
{application_master,start_it_old,4}]}
Erlang has closed
Run Code Online (Sandbox Code Playgroud)
我当前的修复:每次发生这种情况时,我都会将相应的rabbit_persister.log 文件重命名为其他名称(rabbit_persister.log.bak),并且能够成功重新启动 RabbitMQ。但问题不断出现,我也说不出原因。有任何想法吗?
另外,作为免责声明,我没有使用 Erlang 的经验;我只使用 RabbitMQ,因为它是 Celery 青睐的代理。
预先感谢,这个问题真的很烦我,因为我一遍又一遍地做同样的修复。
持久化器是RabbitMQ的内部消息数据库。该“日志”可能类似于数据库日志,删除它会导致您丢失消息。我猜它会被不干净的经纪商关闭所破坏,但这有点离题了。
有趣的是,您在模块中遇到了错误rabbit_persister
。具有该文件的 RabbitMQ 的最后一个版本是 2.2.0,因此我强烈建议您升级。最好的版本始终是最新的,您可以使用 RabbitMQ APT 存储库获取该版本。特别是,持久化器在 2.2.0 之后的版本中已经看到了相当多的修复,因此很有可能您的问题已经得到解决。
如果升级后仍然遇到问题,您应该在RabbitMQ 讨论邮件列表上报告该问题。开发人员(Celery 和 RabbitMQ)致力于修复那里报告的任何问题。
归档时间: |
|
查看次数: |
3033 次 |
最近记录: |