2015-01-11 22 views
5

Tôi cần kiểm tra xem công việc đã được thêm vào hàng đợi (Beanstalkd) đã được hoàn thành trong Laravel (Laravel 5) chưa. nhiệm vụ được thêm vào hàng đợi cập nhật bản ghi trong cơ sở dữ liệu). Tôi đã thêm vào composer.json tôi:Làm thế nào để kiểm tra xem công việc trong hàng đợi Beanstalkd đã được hoàn thành trong Laravel

"pda/pheanstalk": "3.*" 

tôi thêm công việc phải xếp hàng theo cách này:

$jobId = Queue::push('App\Class', $object->toArray(), $this->getQueueName()); 

tôi sử dụng để kiểm tra xem công việc được hoàn thành sử dụng là chức năng sau:

public function find($queueName, $jobId, $recordId) 
{ 
    $phean = Queue::getPheanstalk(); 

    try { 
     $phean->peek($jobId); 
     $data = ['status' => 'waiting']; 
    } catch (ServerException $e) { 
     $message = $e->getMessage(); 

     if ($message == 'NOT_FOUND: Job ' . $jobId . ' does not exist.') { 
      $data = ... // here I get from database data for $recordId 

     } else { 
      $data = ['status' => 'error']; 
     } 
    } 

    return $data; 
} 

Câu hỏi đặt ra là - đó là phương pháp đáng tin cậy để kiểm tra xem công việc đã được hoàn thành chưa? Tôi so sánh ở đây chỉ là thông điệp tôi nhận được từ ngoại lệ. Tôi đã không tìm thấy bất kỳ cách nào khác để kiểm tra xem công việc đã được hoàn thành chưa.

Trả lời

1

Tôi chưa sử dụng Laravel 5, nhưng trên Laaravel 4, bạn có bảng công việc thất bại. Nơi bạn có thể xem công việc nào KHÔNG hoàn thành. Tôi giả định rằng L5 có thể có một cái gì đó hoặc giữ cho quá trình tương tự. Điều đó sẽ không giải quyết được vấn đề của bạn?

Từ quan điểm của tôi, có vẻ như bạn chỉ đang đảo ngược quan điểm. Thay vì tìm kiếm những gì thất bại, bạn đang tìm kiếm những gì đã làm việc.

Nguồn: http://laravel.com/docs/4.2/queues#failed-jobs

0

Tôi chưa sử dụng Laravel 5. Nhưng với Laravel 4, khi một công việc được hoàn thành, nó cần phải được xóa thủ công khỏi hàng đợi. Dưới đây là tài liệu chính thức:

Deleting A Processed Job: Once you have processed a job, it must be deleted from the queue, which can be done via the delete method on the Job instance

Nó chỉ đơn giản có nghĩa là nếu bạn đã không sử dụng một phương pháp như vậy, tình trạng công việc sẽ vẫn còn dang dở. Trong trường hợp của bạn, bạn có thể nhận được hàng đợi và xem liệu id công việc có ở đó không.

+0

Bạn nói đúng, nhưng công việc đi đến công việc thất bại khi không thành công. Vì vậy, khi tôi muốn kiểm tra xem công việc đã được hoàn thành ngay cả khi tôi nhìn vào công việc thất bại, tôi cần phải kiểm tra bằng cách nào đó nếu công việc vẫn còn trong hàng đợi bởi vì nó có thể vẫn còn trong hàng đợi và không phải trong công việc thất bại. –

+0

Hey, có vẻ như pbeanstalk không cung cấp một cách để có được một danh sách toàn bộ các công việc đang chạy. Bạn có thể lưu trữ thông tin liên quan đến công việc vào cơ sở dữ liệu và đánh dấu trạng thái của nó khi nó bị xóa hoặc thất bại. – Ray

0

Nếu bạn cần kích hoạt lệnh dựa trên công việc hoàn thành - thì có vẻ như bạn chỉ cần kích hoạt lệnh được xếp hàng đợi khi công việc hoàn tất - sau đó hệ thống của bạn có thể xử lý phần còn lại?

Nếu không 'bỏ phiếu' cho công việc để xem liệu/khi nó được hoàn thành có vẻ cồng kềnh và không hiệu quả hay không.

Trong Laravel 5 - bạn có thể sử dụng công cụ Lệnh mới mà Taylor đã cung cấp và áp dụng thực thi ShouldBeQueued - vì vậy lệnh được xếp hàng để chạy khi hoàn thành tác vụ khác của bạn.

Các vấn đề liên quan