Symfony:我应该将 rabbitmq:consumer 命令添加到 crontab 吗?
Symfony: should I add the rabbitmq:consumer command to crontab?
我阅读了很多(很棒的)关于将 RabbitMQ 集成到 Symfony 应用程序中的文章。
RabbitMqBundle 使它很容易被忘却,它提供了方便的 rabbitmq:consumer
命令来使用队列中的消息,如下所示:
app/console rabbitmq:consumer -m 50 upload_picture
但是我有一个问题。您是否应该建议将此命令添加到 crontab?有什么最佳实践吗?
更被接受的方法是让你的消费者运行宁。有像 Supervisor and Circus that can help you with that. See this discussion 这样的工具。但是,如果您可以让您的消费者在没有更多消息时退出,您也可以使用 cron。尽管这可能会导致消息消费延迟。您无法立即对消息做出反应。在开始任何任务/接收邮件之前,用户可能需要等待一分钟。
长时间 运行使用您的消费者(或与此相关的任何 PHP 代码)时,请考虑以下事项:
尽量避免内存使用累积。不要在不清除数组的情况下继续追加它们。例如,这意味着您不应该在 Monolog 中使用 FingersCrossedHandler,因为这会保留日志消息的缓冲区。适合单个请求,不适用于一天的调试消息。
即使您很小心,PHP 也可能会泄漏内存。你能说什么,PHP...(这确实是一个标语)在我的情况下,我安装了一个 cronjob,每晚重新启动工作人员,但理论上消费者可以 运行 大约一个月在他们 运行 内存不足之前。
我阅读了很多(很棒的)关于将 RabbitMQ 集成到 Symfony 应用程序中的文章。
RabbitMqBundle 使它很容易被忘却,它提供了方便的 rabbitmq:consumer
命令来使用队列中的消息,如下所示:
app/console rabbitmq:consumer -m 50 upload_picture
但是我有一个问题。您是否应该建议将此命令添加到 crontab?有什么最佳实践吗?
更被接受的方法是让你的消费者运行宁。有像 Supervisor and Circus that can help you with that. See this discussion 这样的工具。但是,如果您可以让您的消费者在没有更多消息时退出,您也可以使用 cron。尽管这可能会导致消息消费延迟。您无法立即对消息做出反应。在开始任何任务/接收邮件之前,用户可能需要等待一分钟。
长时间 运行使用您的消费者(或与此相关的任何 PHP 代码)时,请考虑以下事项:
尽量避免内存使用累积。不要在不清除数组的情况下继续追加它们。例如,这意味着您不应该在 Monolog 中使用 FingersCrossedHandler,因为这会保留日志消息的缓冲区。适合单个请求,不适用于一天的调试消息。
即使您很小心,PHP 也可能会泄漏内存。你能说什么,PHP...(这确实是一个标语)在我的情况下,我安装了一个 cronjob,每晚重新启动工作人员,但理论上消费者可以 运行 大约一个月在他们 运行 内存不足之前。