मैं वर्तमान में RabbitMQClient.dll C# क्लाइंट से EventingBasicConsumer का उपयोग कर रहा हूं, हम उपभोक्ता को दिए गए प्रत्येक संदेश को संभालने के लिए एक अलग थ्रेड उत्पन्न करते हैं।क्लाइंट कनेक्शन को छोड़ देता है जब ग्राहक को संदेश भेजने के लिए 60 सेकंड से अधिक समय लगता है
हमें एक अजीब व्यवहार का सामना करना पड़ा, RabbitMQ सर्वर missed heartbeats from client, timeout: 60s
त्रुटि के साथ बार कनेक्शन बंद कर देता है। कुछ क्षण बाद ग्राहक Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Library, code=541
कहकर एक त्रुटि रिपोर्ट करता है। मुझे यह त्रुटि client unexpectedly closed TCP connection
भी अधिक बार हो रही है।
कुछ स्थितियों में ग्राहकों को एक नौकरी अनुरोध को संसाधित करने में 60 से अधिक सेकंड लग सकते हैं और यह त्रुटि ऐसी स्थितियों के तहत होती है।
क्या यह आवश्यक है कि नौकरी 60 सेकंड के भीतर संसाधित की जाए? क्योंकि हमारी प्रक्रिया के लिए यह 30 सेकंड से 5 मिनट के बीच भिन्न हो सकता है।
RabbitMQ सर्वर: 3.6.6 RabbitMQ.Client.dll (सी # ग्राहक): RabbitMQ.Client.4.1.1
इस मामले की छानबीन किसी भी अंतर्दृष्टि बहुत सराहना कर रहा है।
आप संभवतः 'प्राप्त' हैंडलर के अंदर सभी संदेशों को संभालते हैं, जो गर्मी की धड़कन सहित चैनल (मुझे लगता है) पर हर दूसरी गतिविधि को अवरुद्ध करता है। संदेशों को अतुल्यकालिक रूप से संभालने का प्रयास करें: 'प्राप्त' ईवेंट हैंडलर में उन्हें कुछ कतार (जैसे ConcurrentQueue) में रखा गया है और उस पंक्ति को किसी अन्य थ्रेड में संसाधित करें। जब कुछ संदेश के साथ किया जाता है - चैनल पर एसीके। – Evk
मैं वर्तमान में इस तरह प्रसंस्करण करता हूं, लेकिन यह चैनल को क्यों अवरुद्ध करेगा। मेरे पास 100 का प्रीफेच है और मुझे हैंडलर द्वारा 100 धागे पैदा हुए हैं। मैं खरगोश एमक्यू को सक्रिय रूप से सुनकर एक धागा भी देखता हूं, क्या वह दिल की धड़कन का ख्याल नहीं रखता है? – M22an
ठीक है कि विचार आपके दिमाग में आपके मुद्दे के विवरण से आया, मैंने इसे स्वयं सत्यापित नहीं किया। – Evk