【问题标题】:How to process php artisan queue:listen如何处理 php artisan queue:listen
【发布时间】:2020-02-25 06:38:14
【问题描述】:

我在 Laravel 队列系统中遇到了一个严重的问题,请帮我解决这个问题。

一旦我使用

将我的邮件排队
$mailer = Mail::to($email_to)->queue(new ContactGeneral($data));  

它存储到数据库中并从终端运行此命令 php artisan queue:listen 一旦我关闭我的终端它就可以正常工作,它不会监听我的队列。

为此,我在 kernem.php 文件中设置了一个计划,就像每分钟运行的那样

protected function schedule(Schedule $schedule){
    $schedule->command('queue:listen')->everyMinute();
}

在 cronjob 中设置这一行并正常工作

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

问题是每分钟运行每分钟运行它不会杀死前一个进程并在下一分钟运行另一个进程它会减慢我的服务器速度

请您告诉我实现此功能的最佳方法是什么

提前致谢

【问题讨论】:

标签: php laravel laravel-queue laravel-jobs


【解决方案1】:

最好的方法是使用supervisor。虽然如果您在共享主机环境中运行应用程序,您可以处理一次队列然后退出进程,从而使用以下命令释放内存:

php artisan queue:work --once

根据您将拥有的队列数量,将队列设置为每 1、2 或 3 分钟运行一次,以确保前一个进程有时间消耗队列并且它们不会经常干扰。我认为您可以使用以下命令:

* * * * * cd /path-to-your-project && php artisan queue:work --once

【讨论】:

    【解决方案2】:

    不,您不需要安排此过程

    只要 queue:work 进程正在运行,他就会查看您的“jobs”表并逐个运行任务

    您需要的是确保关闭控制台时进程不会结束,因为 user8555937 和 Webinion 说您需要主管及其配置文件,一旦您运行它,它将在后台运行,您可以忘了它

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 2019-05-12
      • 2017-08-04
      • 2017-04-06
      • 2016-02-10
      • 2021-08-07
      相关资源
      最近更新 更多