2014-05-20 20 views
9

Tôi đã sử dụng hệ thống Queue trong Laravel 4 và nó hoạt động rất tốt! - Tôi đã tự hỏi nếu có một cách để xem những gì đang thực sự trong hàng đợi? Tôi đang sử dụng redis cho back-end.Laravel 4 Queue

+0

Ý của bạn là gì trong 'trong hàng đợi'? –

+0

những gì đã từng được xếp hàng đợi và vẫn đang chờ xử lý –

+0

Bạn đã thử với hàng thủ công php: nghe chưa? – Alen

Trả lời

22

Tôi đã dành chút thời gian cho việc đào bới quanh trình điều khiển Hàng đợi và API. Tôi đã có thể tìm thấy câu trả lời cho bạn.

TL ngắn; DR phiên bản:

Không có Queue::getList() (hoặc tương tự) chức năng có nguồn gốc trên giao diện Queue.

Nhưng điều này sẽ giúp bạn có được một danh sách của tất cả các công việc xếp hàng đợi trong default Redis hàng đợi của bạn chờ đợi để được xử lý:

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

thay đổi default tên khác nếu bạn chạy nhiều ống đợi.

Được cảnh báo rằng lệnh có thể dẫn đến một tập dữ liệu rất lớn được trả lại (nó giống như bán phá giá một phần của cơ sở dữ liệu của bạn) - vì vậy bạn chỉ có thể muốn để có được số lượng việc làm xếp hàng đợi thay vì:

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

Phiên bản dài hơn:

Không có hàm gốc Queue::getList() (hoặc tương tự) trên giao diện Hàng đợi. Nhưng tôi nhận thấy rằng nó có thể để có được những tài xế Redis từ giao diện Queue:

$redis = Queue::getRedis(); 

Đào vào người lái xe Redis - chúng ta có thể thấy có một chức năng gọi là command(). Được định nghĩa là

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

Vì vậy, điều đó có nghĩa là giờ đây chúng tôi có thể chạy bất kỳ lệnh Redis gốc thông qua Laravel lên phiên bản Redis.

A full list of Redis commands is here

Bằng cách duyệt danh sách đó - chúng tôi có một số lệnh hữu ích mà chúng ta có thể sử dụng cho Queues.

Thứ nhất - bạn có thể xem tất cả các KEYS sẵn - mà có thể hữu ích nếu bạn không chắc chắn về tên của hàng đợi của bạn:

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

Bạn cũng có thể chắc chắn một KEY cụ thể tồn tại trước khi chạy hoạt động khác - như thế này:

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

Ngoài ra - bạn có thể lấy chiều dài của hàng đợi - đó là hữu ích

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

Và cuối cùng bạn có thể nhận được toàn bộ danh sách hàng đợi với điều này

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

Nếu bạn không muốn danh sách đầy đủ (có lẽ hàng đợi của bạn là khá lớn) - bạn có thể có được một tập hợp con của nó. Read more a LRANGE at the Redis docs here.

+0

@Ben Kilah - điều đó có trả lời câu hỏi của bạn không? Bạn có cần thêm thông tin? – Laurence

+0

cảm ơn rất nhiều câu trả lời tuyệt vời, xin lỗi tôi đã đến muộn bên! :) –

0

không chính xác câu trả lời cho trường hợp của bạn mà chỉ là tham chiếu cho người khác.

Nếu bạn đang sử dụng beanstalkd lái xe hơn bạn có thể truy cập vào thông tin đó như thế này:

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

nơi biến số liệu thống kê sẽ có những thuộc tính:

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

như vậy thì ví dụ $stats['current-jobs-ready'] sẽ trở lại công việc sẵn sàng để được nhân viên xử lý.