我可以这样开始队列:
php artisan queue:listen
这样可以正常工作,但我想监控队列是否正在运行,尤其重要,因为如果不这样做,似乎没有回退。
要清楚,如果我通过控制器排队电子邮件,如下:
$this->mailer->queue($view, $data, function ($message) use ($toEmail, $toName, $subject) {
$message
->to($toEmail, $toName)
->subject($subject);
});
这将成功运行,但如果队列不是“正在侦听”,则作业将永久地推送到作业表。
我正在寻找像\Queue::isListening();
答案 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()
{
//...
}
}
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