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

Chr*_*ris 10 laravel laravel-5.1

我可以这样开始队列:

php artisan queue:listen
Run Code Online (Sandbox Code Playgroud)

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

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

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

这将成功运行,但如果队列没有"侦听",则作业将永久地推送到作业表.

我正在寻找类似的东西 \Queue::isListening();

jmc*_*ory 21

这是较低级别的,但同样,您可以运行命令,例如ps -aux | grep queue在您的应用程序/队列工作人员正在运行的任何服务器上查看正在运行的队列进程。

  • 这个应该更高,它最好地回答了这个问题。谢谢你! (6认同)

The*_*pha 11

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

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

或者,您可以failedhandler类中声明一个方法,例如:

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

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


    public function failed()
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

更新的链接.

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

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

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

[program:queue]
command=/usr/local/bin/php artisan queue:listen --tries=3
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

那么,您可以阅读文档以真正了解它.这可以帮助您开始.

  • 我知道你要去哪里(我目前正在使用supervisord) - 但我基本上想对系统进行健康检查。我想我也许可以通过故意创建一个假队列项目来利用您的第一个事件技术,并监听它是否失败。 (3认同)

Fel*_*nen 10

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

php artisan queue:monitor redis:default
Run Code Online (Sandbox Code Playgroud)

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