2014-05-20 20 views
9

Ich habe das Queue-System in Laravel 4 verwendet und es funktioniert super! - Ich habe mich gefragt, ob es einen Weg gibt, um zu sehen, was eigentlich in der Warteschlange ist? Ich benutze redis für das Backend.Laravel 4 Queue

+0

Was meinst du mit "in der Warteschlange"? –

+0

was auch immer in der Warteschlange war und immer noch darauf wartet, bearbeitet zu werden –

+0

Hast du es mit php artisan queue probiert: hör zu? – Alen

Antwort

22

Ich verbrachte einige Zeit mit diesem Graben um den Queue-Treiber und die API. Ich konnte eine Antwort für dich finden.

Short TL; DR Version:

Es gibt keine native Queue::getList() (oder ähnlich) Funktion auf der Queue-Schnittstelle. wenn Sie mehrere Warteschlangen-Röhren laufen

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

Änderung default auf einen anderen Namen:

Aber dies wird Ihnen eine Liste aller Jobs in der Warteschlange in Ihrer default Redis Warteschlange erhalten warten verarbeitet werden.

gewarnt, dass Befehl in einer sehr großen Datenmenge zurückgegeben führen könnte (es ist wie ein Teil Ihrer Datenbank Dumping) - so möchten Sie vielleicht nur die Zahl der Arbeitsplätze, anstatt die Warteschlange gestellt bekommen:

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

Längere Version:

Es gibt keine native Queue::getList() (oder ähnliche) Funktion in der Warteschlangenschnittstelle. Aber ich merkte, dass es möglich ist, die Redis-Treiber von der Queue-Schnittstelle zu erhalten:

$redis = Queue::getRedis(); 

Graben in den Redis Fahrer - wir dort sehen kann, ist eine Funktion command() genannt. Die als

command(string $method, array $parameters = array()) 
Run a command against the Redis database. 

ist so definiert, bedeutet, dass wir jetzt alle nativen Redis Befehl durch Laravel auf die Redis Instanz ausgeführt werden kann.

A full list of Redis commands is here

Durch diese Liste Surfen - Wir haben eine Reihe hilfreicher Befehle, die wir für Warteschlangen verwenden können.

Erstens - können Sie alle KEYS verfügbar sehen - was nützlich sein könnte, wenn Sie nicht sicher, ob der Name Ihrer Warteschlangen sind:

$keys = Queue::getRedis()->command('KEYS',['*']); 

Sie auch sicher, dass ein bestimmter Schlüssel vorhanden ist vor dem Ausführen einer weiteren Operation machen - wie folgt aus:

if (Queue::getRedis()->command('EXISTS',['queues:default'])) 
{ 
    // Queues:default key exists! 
} 

auch - können Sie die Länge der Warteschlange zu bekommen - was nützlich ist,

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

Und schließlich können Sie die gesamte Liste der Warteschlangen mit diesem

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

bekommen Wenn Sie die vollständige Liste nicht wollen (vielleicht ist die Warteschlange ziemlich groß) - Sie eine Teilmenge davon bekommen kann. Read more a LRANGE at the Redis docs here.

+0

@Ben Kilah - beantwortet das deine Frage? Brauchen Sie weitere Informationen? – Laurence

+0

vielen Dank, ausgezeichnete Antwort, tut mir leid, ich war zu spät zur Party! :) –

0

nicht genau für Ihren Fall, sondern nur als Referenz für andere.

Wenn Sie Treiber verwenden beanstalkd als Sie diese Informationen wie folgt zugreifen können:

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', 
) 

so dann zum Beispiel $stats['current-jobs-ready'] werden Arbeitsplätze zurück:

$stats = Queue::getPheanstalk()->stats(); 

, wo die Statistiken Variable diese Eigenschaften haben bereit, vom Arbeiter verarbeitet zu werden.