2015-11-18 5 views
7


मेरे पास एक खरगोश सर्वर और एक एम्कप उपभोक्ता (पायथन) कोम्बू का उपयोग कर है।
मैंने अपने ऐप को उस सिस्टम में स्थापित किया है जिसमें फ़ायरवॉल है जो 1 घंटे के बाद निष्क्रिय कनेक्शन बंद कर देता है।खरगोश एमक्यू दिल की धड़कन बनाम कनेक्शन नाली घटनाओं का समय

try: 
    # connections 
    with Connection(self.broker_url, ssl=_ssl, heartbeat=self.heartbeat) as conn: 
     chan = conn.channel() 
     # more stuff here 
     with conn.Consumer(queue, callbacks = [messageHandler], channel = chan): 
     # Process messages and handle events on all channels 
     while True: 
      conn.drain_events() 

except Exception as e: 
    # do stuff 

क्या मैं चाहता हूँ कि अगर फ़ायरवॉल कनेक्शन बंद कर दिया है, तो मैं पुनः जुड़ना चाहते है:
यह मेरा amqp_consumer.py है। क्या मुझे दिल की धड़कन तर्क का उपयोग करना चाहिए या क्या मुझे drain_events() फ़ंक्शन पर टाइमआउट तर्क (3600 सेकेंड का) पास करना चाहिए?
दोनों विकल्पों के बीच अंतर क्या हैं? (ऐसा ही लगता है)।
धन्यवाद।

उत्तर

0

अपने आप पर drain_events किसी भी दिल की धड़कन नहीं पैदा करेगा, जब तक उपभोग करने और स्वीकार करने के लिए संदेश न हों। यदि कतार निष्क्रिय है तो आखिरकार कनेक्शन बंद हो जाएगा (खरगोश सर्वर या आपके फ़ायरवॉल द्वारा)।

while True: 
    try: 
     conn.drain_events(timeout=1) 
    except socket.timeout: 
     conn.heartbeat_check() 

इस तरह भले ही कतार निष्क्रिय कनेक्शन बंद कर दिया नहीं किया जाएगा:

आपको क्या करना चाहिए तो जैसे दोनों दिल की धड़कन और समय समाप्ति का उपयोग करें।

इसके अलावा यदि कनेक्शन बंद हो जाता है या कुछ अन्य नेटवर्क त्रुटि हो तो आप पूरी चीज को पुनः प्रयास नीति के साथ लपेटना चाहेंगे।

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