如何监视Laravel队列是否正在运行?
我可以这样启动队列:如何监视Laravel队列是否正在运行?,laravel,laravel-5.1,Laravel,Laravel 5.1,我可以这样启动队列: php artisan queue:listen 这很好,但我想监控队列是否正在运行,尤其重要的是,如果队列没有运行,似乎不会出现回退 明确地说,如果我通过控制器将电子邮件排队,如下所示: $this->mailer->queue($view, $data, function ($message) use ($toEmail, $toName, $subject) { $message ->to($toEmail, $toName
php artisan queue:listen
这很好,但我想监控队列是否正在运行,尤其重要的是,如果队列没有运行,似乎不会出现回退
明确地说,如果我通过控制器将电子邮件排队,如下所示:
$this->mailer->queue($view, $data, function ($message) use ($toEmail, $toName, $subject) {
$message
->to($toEmail, $toName)
->subject($subject);
});
这将成功运行,但如果队列未“侦听”,作业将永远推送到作业表中
我正在寻找类似于
\Queue::isListening()的东西
实际上,当队列失败时,会触发一个失败
事件,因此,例如,您可以在AppServiceProvider
类的boot
方法中注册失败
事件,如下所示:
public function boot()
{
Queue::failing(function (JobFailed $event) {
// $event->connectionName
// $event->job
// $event->data
});
}
[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
或者,您可以在处理程序
类中声明失败的
方法,例如:
class SendEmail extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
public function handle(Mailer $mailer)
{
//...
}
public function failed()
{
//...
}
}
[program:queue]
command=/usr/local/bin/php artisan queue:listen --tries=3
关于后台监控,您可以使用:
Supervisor是一个客户机/服务器系统,允许其用户进行监视
并在类UNIX操作系统上控制许多进程
在这种情况下,您必须将其安装到您的计算机上,并使用至少一个程序
部分对其进行配置,例如:
class SendEmail extends Job implements ShouldQueue
{
use InteractsWithQueue, SerializesModels;
public function handle(Mailer $mailer)
{
//...
}
public function failed()
{
//...
}
}
[program:queue]
command=/usr/local/bin/php artisan queue:listen --tries=3
这是程序
部分的一个示例,我曾使用Supervisord
监视我的队列
。在这种情况下,您需要阅读文档以了解如何使用它,我刚刚给了您一个想法。启动后,supervisord
将在后台运行,即使服务器重新启动(如果由于某种原因停机),它也会重新启动观察,因此您无需担心
简单(最小)配置文件可能如下所示:
public function boot()
{
Queue::failing(function (JobFailed $event) {
// $event->connectionName
// $event->job
// $event->data
});
}
[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
好吧,你可以阅读文档来真正了解它。这可能会帮助你开始。没有像你说的那样的方法 \队列::isListening() 但您可以配置:一个进程控制系统来管理您的队列。下面是一个用于管理器配置的Laravel文档
这是一个较低的级别,但同样,您可以运行命令,如
ps-aux | grep queue
,在您的应用程序/队列工作者运行的任何服务器上查看正在运行的队列进程。我知道您要去哪里(我目前正在使用supervisord)-但我想基本上对系统进行健康检查。我想我可以利用你在那里的第一个事件技巧,故意创建一个假队列项目,然后听听它是否失败。@Chris你找到解决方案了吗?我的主机提供商不允许我使用Supervisord,因为它与其他东西冲突(不知道是什么),这应该更高,它最好地回答了这个问题。非常感谢。