2016-12-21 17 views
5

यह कतार और क्यूईवर्कर्स के साथ काम कर रहे लार्वेल 5.3, बीनस्टॉक, टीटीआर और टाइमआउट से संबंधित है। TTR: https://github.com/kr/beanstalkd/wiki/faqटीटीआर बाहर निकलने पर QueueWorker के साथ क्या होता है?

अगर मैं सही ढंग क़तार से एक नौकरी समझ में राज्य सुरक्षित है जब एक QueueWorker यह उठा हो जाता है। जब टीआरआर खत्म हो जाता है तो यह नौकरी राज्य वापस तैयार हो जाएगा। लेकिन QueueWorker के साथ क्या होता है?

मान लीजिए कि QueueWorker समय समाप्त निम्न आदेश से 600 पर सेट है दो:

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

TTR, डिफ़ॉल्ट के रूप में, है 60 सेकंड के लिए निर्धारित किया है।

नौकरी के दौरान किसी अन्य साइट पर एक अनुरोध किया जाता है और प्रतिक्रिया तक 120 सेकंड लगते हैं। 60 सेकंड के बाद नौकरी तैयार राज्य में वापस सेट की जाती है क्योंकि टीटीआर। क्या QueueWorker प्रतिक्रिया प्राप्त होने तक नौकरी पर काम करना जारी रखेगा, अधिकतम 600 सेकंड? या जब टीटीआर पहुंचेगा तो क्यूईवर्कर नौकरी पर काम करना बंद कर देगा?

उत्तर

3

असल में, क्यूईवर्कर काम पूरा होने तक चलेगा। जब आप डिमन ध्वज के बिना कतार कार्यकर्ता चलाते हैं तो कोड कोड चलाएंगे।

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

सन्दर्भ: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Queue/Console/WorkCommand.php#L123

क्या acctually इस कोड में करता है यह कतार से पॉप काम है और आदेश के रूप में है कि काम आग है।

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; 
    } 
} 

सन्दर्भ: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Queue/Worker.php#L213

अधिक जानकारी https://github.com/laravel/framework/tree/5.2/src/Illuminate/Queue

+0

इस QueueWorker मतलब यह है टाइमआउट तक काम पर काम पर पहुँच गया है रखना होगा के लिए स्रोत खुदाई, तब भी जब TTR बाहर भाग? – MmynameStackflow

+0

सही। टीटीआर कैसे काम करता है के बारे में अधिक जानकारी के लिए https://github.com/kr/beanstalkd/wiki/faq#how-does-ttr-work –

+0

60 सेकंड के बाद टाइमआउट को उच्चतम सेट करने का बिंदु क्या है? अभी, एक दूसरा क्यूईवर्कर नौकरी लेगा क्योंकि टीटीआर खत्म हो जाने के बाद और नौकरी के लिए तैयार राज्य होगा जो समस्याओं का कारण बनता है क्योंकि इसे हटाने के लिए पहली क्यूईवर्कर अब नौकरी नहीं ढूंढ पा रहा है। जब आप एक टाइमआउट उच्च का उपयोग करते हैं तो टीटीआर थोड़ी देर में नौकरी को "छूने" का उपयोग करना आवश्यक है, टीटीआर को टाइमआउट तक पहुंचने तक समय से बाहर होने से रोकना। क्या मैं सही हूँ? – MmynameStackflow

संबंधित मुद्दे