2017-01-18 13 views
5

मुझे एक अजीब समस्या है जहां ब्रोकर को भेजे जाने के बाद मेरे कुछ कार्यों को छोड़ दिया जा रहा है। यह 10 कार्यों में से लगभग 1 के लिए होता है। मैंने जांच की है कि कार्य का उपभोग करने वाला कोई पुराना अजवाइन कार्यकर्ता नहीं है।खरगोश के ब्रोकर को भेजने के बाद सेलेरी कार्य खो गए

मैंने लापता कार्यों की निगरानी के लिए डेटाबेस समर्थित बैकएंड और फूल का उपयोग किया, लेकिन task_idync डेटाबेस के बाद या फूल में मौजूद नहीं है। इसकी स्थिति हमेशा लंबित के रूप में आता है।

तब मैंने यह पता लगाने के लिए अजवाइन संकेतों का उपयोग किया कि क्या हो रहा है। मैंने पाया कि लापता कार्यों के लिए, केवल before_task_publish और बाद_टस्क_पublिश सिग्नल निकाल दिए जाते हैं। पोस्ट करें कि इस कार्य के लिए कोई निशान नहीं है।

ये मेरी संकेतों

@before_task_publish.connect 
def before_task_publish_handler(sender=None, headers=None, body=None, **kwargs): 
# information about task are located in headers for task messages 
# using the task protocol version 2. 
    logger.info("BEFORE TASK SENT id:"+body['id']) 



@after_task_publish.connect 
def after_task_publish_handler(sender=None, headers=None, body=None, exchange=None, routing_key=None, **kwargs): 
# information about task are located in headers for task messages 
# using the task protocol version 2. 
    logger.info("AFTER TASK SENT id:"+body['id']) 


@task_prerun.connect 
def task_prerun_handler(sender=None, task_id=None, task=None, **kwargs): 
    logger.info("TASK PRERUN with TASK_ID:"+str(task_id)) 

हैं, तो यह है कि मैं क्या लॉग

$ cat gunicorn-access.log | grep -i 103de274-00dc-4765-844f-d319e9e199c2 
    BEFORE TASK SENT id: '103de274-00dc-4765-844f-d319e9e199c2' 
    AFTER TASK SENT id: '103de274-00dc-4765-844f-d319e9e199c2' 

मुझे यकीन है कि काम RabbitMQ द्वारा नजरअंदाज कर दिया है या उसके चुपचाप किसी कारण से गिरा दिया है कि क्या नहीं कर रहा हूँ में पाया।

+0

क्या आपको कारण मिला है? – melih

उत्तर

2

एक बार में सेलेरी इसे निष्पादित होने से पहले कार्यों को खो देता है। यदि आप उन्हें खोना नहीं चाहते हैं, तो आपको पुराने संस्करणों में task_acks_late (CELERY_ACKS_LATE सक्षम करना) सेट करना चाहिए।

अपने अजवाइन सेटिंग्स में,

task_acks_late = True 

यह सुनिश्चित करें कि कार्य संदेशों after the task has been executed दी जाएगी बनाता है निर्धारित किया है।

+0

जो मेरी समस्या का समाधान नहीं करता है। tcpdump मुझे दिखाता है कि amqp पैकेट rabbitmq सर्वर पर भेजा जा रहा है लेकिन दूसरे छोर पर कोई पैकेट प्राप्त नहीं किया गया है। ग्राहक और सर्वर विभिन्न Azure खातों पर हैं। Azure के टीसीपी कनेक्शन टाइमआउट कॉन्फ़िगरेशन को प्रभावित कर सकता है लेकिन रखरखाव या दिल की धड़कन का उपयोग करके इसे हल नहीं किया गया है। – melih

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