Php 拉维尔4号队列

Php 拉维尔4号队列,php,laravel,laravel-4,Php,Laravel,Laravel 4,我一直在使用Laravel 4中的队列系统,效果非常好我想知道是否有办法查看队列中的实际内容?我正在使用redis作为后端。我花了一些时间研究队列驱动程序和应用程序。我能为你找到答案 短TL;灾难恢复版本: 队列接口上没有本机队列::getList()(或类似)函数 但这将为您的defaultRedis队列中等待处理的所有排队作业提供一个列表: $list = (Queue::getRedis()->command('LRANGE',['queues:default', '0', '-1'

我一直在使用Laravel 4中的队列系统,效果非常好我想知道是否有办法查看队列中的实际内容?我正在使用redis作为后端。

我花了一些时间研究队列驱动程序和应用程序。我能为你找到答案

短TL;灾难恢复版本:

队列接口上没有本机
队列::getList()
(或类似)函数

但这将为您的
default
Redis队列中等待处理的所有排队作业提供一个列表:

$list = (Queue::getRedis()->command('LRANGE',['queues:default', '0', '-1']));
如果运行多个队列管,请将
默认值更改为另一个名称

请注意,该命令可能会导致返回非常大的数据集(就像转储数据库的一部分),因此您可能只想获得排队的作业数:

 $queue_length = (Queue::getRedis()->command('LLEN',['queues:default']));
较长版本

队列接口上没有本机
队列::getList()
(或类似)函数。但我注意到可以从队列接口获取Redis驱动程序:

$redis = Queue::getRedis();
深入研究Redis驱动程序-我们可以看到有一个名为
command()
的函数。定义为

command(string $method, array $parameters = array()) 
Run a command against the Redis database.
这意味着我们现在可以通过Laravel在Redis实例上运行任何本机Redis命令

通过浏览该列表,我们可以使用许多有用的命令来处理队列

首先,您可以查看所有可用的
,如果您不确定队列的名称,这可能会很有用:

$keys = Queue::getRedis()->command('KEYS',['*']);
在运行另一个操作之前,您还可以确保存在特定的密钥-如下所示:

if (Queue::getRedis()->command('EXISTS',['queues:default']))
{
    // Queues:default key exists!
}
$stats = Queue::getPheanstalk()->stats();
此外,您还可以获得队列的长度,这很有用

 $queue_length = (Queue::getRedis()->command('LLEN',['queues:default']));
最后,您可以使用此工具获得整个队列列表

 $list = (Queue::getRedis()->command('LRANGE',['queues:default1', '0', '-1']));

如果你不想要完整的列表(也许你的队列很大),你可以得到它的一个子集

不完全符合您的情况,只是作为其他人的参考

如果您使用的是beanstalkd驱动程序,则可以访问以下信息:

if (Queue::getRedis()->command('EXISTS',['queues:default']))
{
    // Queues:default key exists!
}
$stats = Queue::getPheanstalk()->stats();
其中stats变量将具有以下属性:

array(
   'current-jobs-urgent' => '0',
   'current-jobs-ready' => '5',
   'current-jobs-reserved' => '0',
   'current-jobs-delayed' => '0',
   'current-jobs-buried' => '0',
   'cmd-put' => '95',
   'cmd-peek' => '0',
   'cmd-peek-ready' => '130',
   'cmd-peek-delayed' => '32',
   'cmd-peek-buried' => '32',
   'cmd-reserve' => '0',
   'cmd-reserve-with-timeout' => '1142',
   'cmd-delete' => '90',
   'cmd-release' => '1124',
   'cmd-use' => '194',
   'cmd-watch' => '0',
   'cmd-ignore' => '0',
   'cmd-bury' => '0',
   'cmd-kick' => '0',
   'cmd-touch' => '0',
   'cmd-stats' => '37',
   'cmd-stats-job' => '32',
   'cmd-stats-tube' => '78822',
   'cmd-list-tubes' => '78822',
   'cmd-list-tube-used' => '0',
   'cmd-list-tubes-watched' => '0',
   'cmd-pause-tube' => '0',
   'job-timeouts' => '3',
   'total-jobs' => '95',
   'max-job-size' => '65535',
   'current-tubes' => '1',
   'current-connections' => '1',
   'current-producers' => '0',
   'current-workers' => '0',
   'current-waiting' => '0',
   'total-connections' => '40679',
   'pid' => '15937',
   'version' => '1.10',
   'rusage-utime' => '6.184000',
   'rusage-stime' => '16.808000',
   'uptime' => '146790',
   'binlog-oldest-index' => '0',
   'binlog-current-index' => '0',
   'binlog-records-migrated' => '0',
   'binlog-records-written' => '0',
   'binlog-max-size' => '10485760',
   'id' => '56d8d2c9888219bc',
   'hostname' => 'ddeath-pc',
)

因此,例如,
$stats['current-jobs-ready']
将返回准备由工作人员处理的作业。

您所说的队列中的
是什么意思
?有什么东西排队后仍在等待处理?您尝试过php artisan队列吗:听着?@Ben Kilah-这回答了您的问题吗?你需要更多的信息吗?非常感谢回答得很好,很抱歉我来晚了!:)