队列侦听器未在服务器上启动,某些作业被推送(使用Redis驱动程序)。
我怎么能算上(或得到所有)这些工作?我没有找到任何工匠命令来获取这些信息。
答案 0 :(得分:15)
如果有人在这里寻找答案就是我的方式:
$connection = null;
$default = 'default';
//For the delayed jobs
var_dump( \Queue::getRedis()->connection($connection)->zrange('queues:'.$default.':delayed' ,0, -1) );
//For the reserved jobs
var_dump( \Queue::getRedis()->connection($connection)->zrange('queues:'.$default.':reserved' ,0, -1) );
$connection
是Redis连接名称,默认为null,$queue
是队列/管的名称,默认为'默认情况下!
答案 1 :(得分:7)
自Laravel 5.3起,您只需使用Queue::size()
(请参阅PR)。
答案 2 :(得分:6)
您也可以直接使用Redis Facade:
use Redis;
\Redis::lrange('queues:$queueName', 0, -1);
在Laravel 5.6中测试,但应该适用于所有5.X。
答案 3 :(得分:3)
我是PHP Laravel开发人员,已经三年了,我最近才知道这些命令,所以让我感到羞耻。 ;(
如果队列使用redis
驱动程序,则可以按名称计数所有剩余的作业:
use Redis;
$queueName = 'default';
echo Redis::llen('queues:' . $queueName);
// To count by status:
echo Redis::zcount('queues:' . $queueName . ':delayed', '-inf', '+inf');
echo Redis::zcount('queues:' . $queueName . ':reserved', '-inf', '+inf');
要立即查看结果,可以使用php artisan tinker
并点击Redis::llen('queues:default');
。
答案 4 :(得分:2)
您可以安装Horizon。 Laravel Horizon提供了一个用于监控队列的仪表板,并允许您对队列进行更多配置。
composer require laravel/horizon
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"
您必须设置.env
配置文件和config/horizon.php
文件。
通过Laravel 5.6测试
答案 5 :(得分:0)
如果有人仍在寻找使用Laravel较早版本的方法:
$connection = 'queue';
$queueName = 'default';
$totalQueuedLeads = Redis::connection($connection)->zcount('queues:'.$queueName.':delayed' , '-inf', '+inf');
答案 6 :(得分:0)
我的laravel 5.7项目中有两个队列,一个默认队列和一个low_prio队列。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class JobsOnQueue extends Command
{
// su -c "php artisan jobs:on:queue" -s /bin/sh www-data
protected $signature = 'jobs:on:queue';
protected $description = 'Print jobs in redis';
protected $lines = [];
public function handle()
{
$connection = null;
$queuename = 'default';
$default_delayed = \Queue::getRedis()
->connection($connection)
->zrange('queues:' . $queuename . ':delayed', -9999, 9999);
$default_reserved = \Queue::getRedis()
->connection($connection)
->zrange('queues:' . $queuename . ':reserved', -9999, 9999);
$queuename = 'low_prio';
$low_prio_delayed = \Queue::getRedis()
->connection($connection)
->zrange('queues:' . $queuename . ':delayed', -9999, 9999);
$low_prio_reserved = \Queue::getRedis()
->connection($connection)
->zrange('queues:' . $queuename . ':reserved', -9999, 9999);
$this->getQueueData('default delayed', $default_delayed);
$this->getQueueData('default reserved', $default_reserved);
$this->getQueueData('low prio delayed', $low_prio_delayed);
$this->getQueueData('low prio reserved', $low_prio_reserved);
$this->info(join("\n", $this->lines));
}
private function getQueueData($title, $arr)
{
$this->lines[] = "*** $title ***";
if (count($arr) == 0) {
$this->lines[] = "Nothing on queue";
$this->lines[] = "";
return;
}
foreach ($arr as $json) {
$queue = json_decode($json);
$data = $queue->data;
if (isset($data) && isset($data->command)) {
$this->getCommands($data->command);
}
}
$this->lines[] = "";
}
private function getCommands($serialized)
{
$readable = str_replace(
'O:43:"Illuminate\Foundation\Console\QueuedCommand',
'O:33:"App\Support\ReadableQueuedCommand',
$serialized);
$readable = unserialize($readable);
$command = $readable->getData();
$attribs = [];
$options = $command[1];
foreach ($options as $key => $value) {
$attribs[] = $key . '=' . $value;
}
$this->lines[] = $command[0] . ' ' . join(" - ", $attribs);
}
}
ReadableQueuedCommand看起来像这样
<?php
namespace App\Support;
use Illuminate\Foundation\Console\QueuedCommand;
class ReadableQueuedCommand extends QueuedCommand
{
public function getData()
{
return $this->data;
}
}
artisan命令然后列出队列中的所有对象
> php artisan jobs:on:queue
*** default delayed ***
Nothing on queue
*** default reserved ***
Nothing on queue
*** low prio delayed ***
Nothing on queue
*** low prio reserved ***
oppty:time:profile --by-dataset=2
oppty:on:reset:pages --by-dataset=2