如何监视Laravel队列是否正在运行?

时间:2015-09-26 07:00:56

标签: laravel laravel-5.1

我可以这样开始队列:

php artisan queue:listen

这样可以正常工作,但我想监控队列是否正在运行,尤其重要,因为如果不这样做,似乎没有回退。

要清楚,如果我通过控制器排队电子邮件,如下:

$this->mailer->queue($view, $data, function ($message) use ($toEmail, $toName, $subject) {
    $message
        ->to($toEmail, $toName)
        ->subject($subject);
    });

这将成功运行,但如果队列不是“正在侦听”,则作业将永久地推送到作业表。

我正在寻找像\Queue::isListening();

这样的东西

4 个答案:

答案 0 :(得分:8)

实际上,当队列失败时,failing事件会触发,例如,您可以使用某些内容在failing方法的AppServiceProvider类中注册boot个事件像这样:

public function boot()
{
    Queue::failing(function (JobFailed $event) {
        // $event->connectionName
        // $event->job
        // $event->data
    });
}

或者,您可以在failed类中声明handler方法,例如:

class SendEmail extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    public function handle(Mailer $mailer)
    {
        //...
    }


    public function failed()
    {
        //...
    }
}

The Updated link

关于后台监控,您可以使用Supervisord

  

Supervisor是一个允许其用户监控的客户端/服务器系统   并在类UNIX操作系统上控制许多进程。

在这种情况下,您必须在计算机上安装它并使用至少一个program部分对其进行配置,例如:

[program:queue]
command=/usr/local/bin/php artisan queue:listen --tries=3

这是我program部分使用queue来监控Supervisord部分的示例。在这种情况下,您需要阅读supervisord的文档以了解如何使用它,我刚刚给了您一个想法。一旦启动supervisord,它就会在后台运行,即使服务器重启后它也会重新开始观察(如果由于某种原因导致服务器出现故障),所以你不必担心关于那个。

简单(最小)配置文件可能如下所示:

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/home/someDirName/www/example.com/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
loglevel=warn

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[program:queue]
command=/usr/local/bin/php artisan queue:listen --tries=3
directory=/home/someDirName/www/example.com
autostart=true
autorestart=true
redirect_stderr=true

好吧,您可以阅读文档以真正了解它。这可以帮助您开始。

答案 1 :(得分:1)

没有像你说的方法

  

\队列:: isListening();

但您可以配置Supervisor:一个过程控制系统来管理您的队列。这是一个用于主管配置的Laravel文档 https://laravel.com/docs/5.1/queues#supervisor-configuration

答案 2 :(得分:0)

这是较低的级别,但出于同样的原因,您可以运行诸如ps -aux | grep queue之类的命令,从字面上查看在您的应用程序/队列工作程序正在其上运行的任何服务器上正在运行的队列进程。

答案 3 :(得分:0)

Laravel 8.53 引入了一个新的 artisan 命令来监控队列:

php artisan queue:monitor redis:default

https://laravel.com/docs/8.x/queues#monitoring-your-queues