[英]Laravel 4 Queue
我一直在Laravel 4中使用Queue系统,效果很好! - 我想知道是否有办法查看Queue中的实际内容? 我正在使用redis作为后端。
我花了一些时间来挖掘Queue驱动程序和API 。 我能找到你的答案。
Short TL; DR版本:
Queue接口上没有本机Queue::getList()
(或类似)函数。
但是,这将为您提供等待处理的default
Redis队列中所有排队作业的列表:
$list = (Queue::getRedis()->command('LRANGE',['queues:default', '0', '-1']));
如果您运行多个队列管,则将default
更改为其他名称。
请注意,该命令可能会导致返回一个非常大的数据集(就像转储数据库的一部分一样) - 因此您可能只想获得排队的作业数量:
$queue_length = (Queue::getRedis()->command('LLEN',['queues:default']));
更长的版本 :
Queue接口上没有本机Queue::getList()
(或类似)函数。 但我注意到可以从Queue界面获取Redis驱动程序:
$redis = Queue::getRedis();
深入研究Redis驱动程序 - 我们可以看到有一个名为command()
的函数。 这被定义为
command(string $method, array $parameters = array())
Run a command against the Redis database.
这意味着我们现在可以通过Laravel将任何本机Redis命令运行到Redis实例上。
通过浏览该列表 - 我们有许多有用的命令可供队列使用。
首先 - 您可以查看所有可用的KEYS
- 如果您不确定队列的名称,这可能很有用:
$keys = Queue::getRedis()->command('KEYS',['*']);
您还可以在运行其他操作之前确保存在特定的KEY - 如下所示:
if (Queue::getRedis()->command('EXISTS',['queues:default']))
{
// Queues:default key exists!
}
此外 - 您可以获得队列的长度 - 这很有用
$queue_length = (Queue::getRedis()->command('LLEN',['queues:default']));
最后,您可以使用此获取整个队列列表
$list = (Queue::getRedis()->command('LRANGE',['queues:default1', '0', '-1']));
如果你不想要完整列表(也许你的队列非常大) - 你可以得到它的一个子集。 阅读Redis文档中的更多LRANGE 。
不完全回答你的情况,但仅作为其他人的参考。
如果您使用的是beanstalkd驱动程序,则可以访问以下信息:
$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']
将返回准备好由worker处理的作业。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.