Symfony:我应该将rabbitmq:consumer命令添加到crontab吗?

Mic*_*rin 7 rabbitmq symfony

我已经阅读了很多关于RabbitMQ集成到Symfony应用程序的文章.

所述RabbitMqBundle使得它很容易忘恩它,并且它提供了方便的rabbitmq:consumer命令从像这样的队列的消息:

app/console rabbitmq:consumer -m 50 upload_picture
Run Code Online (Sandbox Code Playgroud)

不过我有一个问题.您是否应该建议将此命令添加到crontab?有没有关于它的最佳实践?

Xat*_*too 7

更容易接受的方法是让您的消费者继续运行.Supervisor和Circus等工具可以帮助您.见这个讨论.但是如果你没有更多的消息可以让你的消费者退出,你也可以使用cron.虽然这可能会导致消费消息的延迟.您无法立即对邮件做出反应.在任何任务启动/收到邮件之前,用户可能需要等待一分钟.

在长时间运行您的消费者(或任何PHP代码)时,请考虑以下因素:

尽量避免内存使用累积.不要在没有清除它们的情况下继续附加到数组.这意味着您不应该在Monolog中使用FingersCrossedHandler,因为这会保留日志消息的缓冲区.适用于单个请求,不适用于几天的调试消息.

即使你小心,PHP也可能泄漏内存.你能说什么,PHP ......(这确实可以成为一句流行语)在我的情况下,我安装了一个cronjob,每晚重新启动工作人员,但从理论上讲,消费者可能会在内存不足之前运行一个月左右.

  • 谢谢您的回答.这正是我所寻找的,因为在RabbitMQ for Symfony教程中从未提及过.似乎有一个有趣的Symfony包来处理RabbitMQBundle的自动Supervisord配置:https://github.com/Phobetor/rabbitmq-supervisor-bundle (5认同)