2015-01-11 11 views
5

में पूरा हो गया है या नहीं, मुझे यह जांचना होगा कि क्या क्यूई (बीनस्टॉकड) में जॉब जोड़ा गया है, लैरवेल (लैरवेल 5) में पूरा हो गया है और यदि यह पूरा हो गया है तो मुझे अपडेट किए गए रिकॉर्ड को वापस करने की आवश्यकता है (कार्य डेटाबेस में कतार अद्यतन रिकॉर्ड में जोड़ा गया)। मैं अपने composer.json में शामिल किया है:कैसे जांचें कि बीनस्टॉकड कतार में जॉब लार्वेल

"pda/pheanstalk": "3.*" 

मैं इस तरह से क़तार में नौकरी जोड़ें:

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

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

मैं अगर काम का उपयोग कर पूरा किया गया जाँच करने के लिए उपयोग निम्नलिखित समारोह है

सवाल यह है कि क्या यह विश्वसनीय तरीका है कि यह जांचने के लिए कि क्या नौकरी पूरी हो गई है? मैं यहाँ तुलना करता हूं कि संदेश अपवाद से मिलता है। मुझे यह जांचने का कोई और तरीका नहीं मिला है कि नौकरी पूरी हो गई है या नहीं।

उत्तर

1

मैंने अभी तक लार्वेल 5 का उपयोग नहीं किया है, लेकिन लार्वेल 4 पर, आपके पास असफल नौकरियां तालिका है। आप कहां देख सकते हैं कि कौन सी नौकरियां पूरी नहीं हुईं। मुझे लगता है कि एल 5 में कुछ हो सकता है या एक ही प्रक्रिया को रख सकता है। इससे आपकी समस्या हल नहीं होगी?

मेरे दृष्टिकोण से ऐसा लगता है कि आप केवल परिप्रेक्ष्य को बदल रहे हैं। क्या असफल रहा है, इसकी तलाश करने के बजाय, आप क्या काम कर रहे हैं की तलाश में हैं।

स्रोत: http://laravel.com/docs/4.2/queues#failed-jobs

0

मैं अभी तक Laravel 5 प्रयोग नहीं करते। लेकिन लैरावेल 4 के साथ, जब कोई काम समाप्त हो जाता है, तो उसे कतार से मैन्युअल रूप से हटा दिया जाना चाहिए।

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

इसका सीधा सा अर्थ है कि अगर आप इस तरह के एक विधि का उपयोग नहीं किया है, कार्य स्थिति अधूरा ही रहेगा: यहाँ आधिकारिक दस्तावेज है। आपके मामले में, आप कतार प्राप्त कर सकते हैं और देख सकते हैं कि नौकरी आईडी है या नहीं।

+0

आप सही हैं, लेकिन जब यह असफल हो जाता है तो नौकरी विफल हो जाती है। इसलिए जब मैं यह जांचना चाहता हूं कि नौकरी पूरी हो गई है, भले ही मैंने असफल नौकरियों में देखा हो, तो मुझे किसी भी तरह की जांच करने की ज़रूरत है यदि नौकरी अभी भी कतार में है क्योंकि यह अभी भी कतार में है, न कि असफल नौकरियों में। –

+0

अरे, ऐसा लगता है कि pbeanstalk चल रही नौकरियों की पूरी सूची प्राप्त करने का कोई तरीका नहीं प्रदान करता है। आप जॉब से संबंधित जानकारी डेटाबेस में संग्रहीत कर सकते हैं और हटाए जाने या विफल होने पर इसकी स्थिति को चिह्नित कर सकते हैं। – Ray

0

यदि आपको जॉब परिष्करण के आधार पर कमांड को ट्रिगर करने की आवश्यकता है - तो ऐसा लगता है जैसे नौकरी पूरी होने पर आपको केवल कतारबद्ध कमांड को आग लगाना चाहिए - तो आपका सिस्टम बाकी को संभाल सकता है?

अन्यथा नौकरी के लिए 'मतदान' यह देखने के लिए कि क्या/पूरा होने पर यह बोझिल और अक्षम लगता है।

लार्वेल 5 में - आप ईवेंट को टेलर द्वारा प्रदान किए गए नए कमांड टूल का उपयोग कर सकते हैं, और ShouldBeQueued कार्यान्वयन लागू किया गया है - इसलिए आदेश आपके अन्य कार्य को पूरा करने के लिए चलाने के लिए कतारबद्ध है।

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