मुझे यह rabbitmq website पर मिला है, यह नीचे है, इसलिए मैंने नीचे प्रासंगिक भाग उद्धृत किया है।
टीएल; डी संस्करण यह है कि आपके पास प्रति आवेदन 1 कनेक्शन और प्रति थ्रेड 1 चैनल होना चाहिए। उम्मीद है की वो मदद करदे।
कनेक्शन
AMQP कनेक्शन आम तौर पर लंबे समय से रहते थे कर रहे हैं। एएमक्यूपी एक आवेदन स्तर प्रोटोकॉल है जो विश्वसनीय वितरण के लिए टीसीपी का उपयोग करता है। एएमक्यूपी कनेक्शन प्रमाणीकरण का उपयोग करें और टीएलएस (एसएसएल) का उपयोग करके संरक्षित किया जा सकता है। जब एप्लिकेशन को अब एएमक्यूपी ब्रोकर से कनेक्ट करने की आवश्यकता नहीं है, तो को अंतर्निहित अंतर्निहित टीसीपी कनेक्शन को बंद करने के बजाय AMQP कनेक्शन को गहन रूप से बंद करना चाहिए।
चैनल
कुछ अनुप्रयोग एक AMQP दलाल करने के लिए कई कनेक्शन की जरूरत है। हालांकि, पर कई टीसीपी कनेक्शन खोलने के लिए अवांछनीय है क्योंकि ऐसा करने से सिस्टम संसाधनों का उपभोग होता है और इसे फ़ायरवॉल कॉन्फ़िगर करना मुश्किल हो जाता है। AMQP 0-9-1 कनेक्शन चैनलों कि "के रूप में हल्के कनेक्शन है कि एक एकल TCP कनेक्शन साझा" के बारे में सोचा जा सकता है के साथ मल्टिप्लेक्स रहे हैं।
प्रसंस्करण के लिए एकाधिक थ्रेड/प्रक्रियाओं का उपयोग करने वाले अनुप्रयोगों के लिए, प्रति थ्रेड/प्रक्रिया के लिए एक नया चैनल खोलना बहुत आम है और उनके बीच चैनल साझा नहीं करता है। एक विशेष चैनल पर
संचार अन्य चैनल पर संचार से पूरी तरह अलग है, इसलिए हर AMQP विधि भी एक चैनल संख्या कि ग्राहकों यह पता लगाने की जो चैनल विधि के लिए है (और इस प्रकार का उपयोग करें, जो ईवेंट हैंडलर की जरूरत है वहन करती है उदाहरण के लिए, लागू किया जाना है)।
यह सलाह दी जाती है कि थ्रेड सुरक्षित होने के बावजूद 1 चैनल प्रति धागा है, इसलिए आप एक चैनल के माध्यम से कई धागे भेज सकते हैं। अपने आवेदन के संदर्भ में मेरा सुझाव है कि आप हालांकि धागा प्रति 1 चैनल के साथ छड़ी होगी।
इसके अतिरिक्त यह करने के लिए केवल प्रति चैनल 1 उपभोक्ता है की सलाह दी है।
ये केवल दिशा निर्देश हैं ताकि आप कुछ परीक्षण क्या आपके लिए सबसे अच्छा काम करता है देखने के लिए क्या करना होगा।
इस धागे में कुछ अंतर्दृष्टि here और here है।
इन सभी दिशा निर्देशों this post बावजूद चलता है कि यह सबसे अधिक संभावना कई कनेक्शन होने से प्रदर्शन को प्रभावित नहीं करेगा। हालांकि यह विशिष्ट नहीं है कि यह क्लाइंट साइड या सर्वर (rabbitmq) पक्ष के बारे में बात कर रहा है या नहीं। एक बिंदु के साथ यह निश्चित रूप से अधिक कनेक्शन के साथ अधिक सिस्टम संसाधनों का उपयोग करेगा। यदि यह एक समस्या नहीं है और आपको अधिक प्रवाह करना चाहते हैं यह वास्तव में बेहतर हो सकता है कई कनेक्शन है के रूप में this post पता चलता है कई कनेक्शन आप अधिक प्रवाह की अनुमति देगा। ऐसा लगता है कि यहां तक कि यदि कई चैनल हैं तो एक ही समय में केवल एक संदेश कनेक्शन के माध्यम से जाता है। इसलिए एक बड़ा संदेश पूरे कनेक्शन को अवरुद्ध करेगा या एक चैनल पर कई महत्वपूर्ण संदेश एक ही कनेक्शन पर एक महत्वपूर्ण संदेश ब्लॉक कर सकते हैं लेकिन एक अलग चैनल। फिर संसाधन एक मुद्दा हैं। यदि आप एक बैंड कनेक्शन के साथ सभी बैंडविड्थ का उपयोग कर रहे हैं तो एक कनेक्शन पर दो चैनल होने पर अतिरिक्त कनेक्शन जोड़ने में कोई वृद्धि नहीं होगी। इसके अलावा प्रत्येक कनेक्शन अधिक मेमोरी, सीपीयू और फाइलहैंडल्स का उपयोग करेगा, लेकिन यह चिंता नहीं हो सकती है हालांकि स्केलिंग के दौरान कोई समस्या हो सकती है।
झूठा - "चैनल थ्रेड-सुरक्षा चैनल उदाहरण कई धागे द्वारा उपयोग के लिए सुरक्षित हैं।चैनल में अनुरोधों को क्रमबद्ध किया जाता है, केवल एक थ्रेड चैनल पर एक कमांड चलाने में सक्षम होता है। फिर भी, अनुप्रयोगों को एक ही चैनल को एकाधिक धागे में साझा करने के बजाय चैनल प्रति थ्रेड का उपयोग करना पसंद करना चाहिए। "एपीआई दस्तावेज़ों के अनुसार – djechlin
ठीक संपादित किया गया। यह अजीब बात है कि मैंने लिखा है, क्या यह संभव है कि दस्तावेज बदल गया हो? संदेह है। सिर्फ मेरे हिस्से पर एक गलती, माफ़ी। अनुशंसा हालांकि वही रहता है। 1 उपभोक्ता, 1 चैनल, 1 धागा – robthewolf
क्या चैनल थ्रेड-सुरक्षित हैं कार्यान्वयन पर निर्भर करता है। जावा इम्प्ल्यू सुरक्षित है, जबकि .NET एक नहीं है Http://stackoverflow.com/a/17829906/709537 –