2016-12-21 46 views
5

Điều này liên quan đến laravel 5.3, beanstalk, ttr và timeout làm việc với Queue và QueueWorkers. TTR: https://github.com/kr/beanstalkd/wiki/faqĐiều gì sẽ xảy ra với QueueWorker khi TTR hết?

Nếu tôi hiểu chính xác công việc từ Hàng đợi sẽ được nhà nước đặt trước khi một QueueWorker chọn nó. Trạng thái công việc này sẽ được thay đổi trở lại để sẵn sàng khi ttr hết. Nhưng điều gì sẽ xảy ra với QueueWorker?

Hãy nói rằng các QueueWorker có một thời gian chờ thiết lập đến 600 bằng lệnh sau:

php artisan queue:work --tries=1 --timeout=600 --sleep=0 

TTr là, như mặc định, thiết lập đến 60 giây.

Trong công việc, yêu cầu được thực hiện cho một trang web khác và phải mất 120 giây cho đến khi phản hồi. Sau 60 giây, công việc được đặt trở về trạng thái sẵn sàng vì TTR. QueueWorker có tiếp tục làm việc cho đến khi nhận được phản hồi, tối đa 600 giây không? Hay QueueWorker sẽ ngừng làm việc khi TTR đã đạt được?

Trả lời

3

Thực ra, QueueWorker sẽ chạy cho đến khi hoàn thành công việc. Khi bạn chạy hàng đợi công nhân mà không có daemon cờ sẽ chạy dưới đây mã.

return $this->worker->pop(
     $connection, $queue, $delay, 
     $this->option('sleep'), $this->option('tries') 
    ); 

referance: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Queue/Console/WorkCommand.php#L123

gì acctually trong mã này không có gì đó là công việc pop từ hàng đợi và bắn mà công việc như lệnh.

public function process($connection, Job $job, $maxTries = 0, $delay = 0) 
{ 
    if ($maxTries > 0 && $job->attempts() > $maxTries) { 
     return $this->logFailedJob($connection, $job); 
    } 

    try { 
     $job->fire(); 

     $this->raiseAfterJobEvent($connection, $job); 

     return ['job' => $job, 'failed' => false]; 
    } catch (Exception $e) { 

     if (! $job->isDeleted()) { 
      $job->release($delay); 
     } 

     throw $e; 
    } catch (Throwable $e) { 
     if (! $job->isDeleted()) { 
      $job->release($delay); 
     } 

     throw $e; 
    } 
} 

referance: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Queue/Worker.php#L213

Đào nguồn để biết thêm thông tin https://github.com/laravel/framework/tree/5.2/src/Illuminate/Queue

+0

Điều này có nghĩa các QueueWorker sẽ tiếp tục làm việc trên các công việc cho đến khi thời gian chờ đã đạt được, ngay cả khi TTr chạy ra? – MmynameStackflow

+0

Chính xác. để biết thêm chi tiết về cách thức TTR hoạt động https://github.com/kr/beanstalkd/wiki/faq#how-does-ttr-work –

+0

Sau đó, thời điểm thiết lập thời gian chờ cao hơn sau 60 giây là gì? Ngay bây giờ, một QueueWorker thứ hai sẽ chọn công việc bởi vì sau khi TTR chạy ra ngoài và công việc sẽ có trạng thái sẵn sàng gây ra vấn đề bởi vì QueueWorker đầu tiên không thể tìm thấy công việc nữa khi cố gắng xóa nó. Khi bạn sử dụng một thời gian chờ cao hơn thì TTR đó là một phải để sử dụng "chạm" công việc một lần trong một thời gian, ngăn chặn TTR từ hết thời gian cho đến khi thời gian chờ đã đạt được. Tôi có đúng không? – MmynameStackflow

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