2012-08-19 25 views
10
ConnectionFactory factory = new ConnectionFactory {HostName = "localhost"}; 

using (IConnection connection = factory.CreateConnection()) 
using (IModel channel = connection.CreateModel()) 
{ 
    channel.QueueDeclare("hello", false, false, false, null); 
    for (int i = 0; i < 100000; i++) 
    { 
     MemoryStream stream = new MemoryStream(); 

     var user = new User 
         { 
          Id = i 
         }; 

     Serializer.Serialize(stream, user); 


     channel.BasicPublish("", "hello", null, stream.ToArray()); 

    } 

} 

मेरे पास उपरोक्त कोड है, और मैं थ्रेड सुरक्षा के बारे में उत्सुक हूं।सी # RabbitMQ क्लाइंट थ्रेड सुरक्षा

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि ConnectionFactory धागा सुरक्षित है। लेकिन मुझे यकीन नहीं है कि IConnection धागा सुरक्षित है? क्या मुझे प्रति अनुरोध कनेक्शन बनाना चाहिए? या बल्कि एक लगातार कनेक्शन? और IChannel के बारे में क्या?

साथ ही, क्या मुझे कनेक्शन को थ्रेडलोकल के रूप में स्टोर करना चाहिए? या क्या मुझे प्रति अनुरोध कनेक्शन बनाना चाहिए?

+1

इस प्रश्न का मेरा उत्तर देखें http://stackoverflow.com/questions/10407760/is-there-a-performance-difference-between-pooling-connections-or-channels-in-rab/10501593#10501593 – robthewolf

उत्तर

23

आईकोनक्शन थ्रेड सुरक्षित है, इमोडेल नहीं है। आम तौर पर आपको अपने आवेदन के जीवनकाल के लिए कनेक्शन खोलने का प्रयास करना चाहिए। यह विशेष रूप से सच है यदि आपके पास ऐसे उपभोक्ता हैं जिन्हें संदेश प्राप्त करने के लिए खुले कनेक्शन की आवश्यकता होती है। नेटवर्क या ब्रोकर विफलता के कारण, बाधित कनेक्शन से पता लगाना और पुनर्प्राप्त करना महत्वपूर्ण है। मैं विडेला और विलियम्स द्वारा 'खरगोश एमक्यू एक्शन' पढ़ने की सिफारिश करता हूं, विशेष रूप से अध्याय 6 'लेखन कोड जो विफलता से बचता है'।

अब एक लापरवाही प्लग के लिए। मैं EasyNetQ का लेखक हूं, जो खरगोश एमक्यू के लिए एक उच्च स्तरीय .NET API है। यह आपके लिए सभी कनेक्शन प्रबंधन करता है और नेटवर्क या ब्रोकर आउटेज होने पर आपके सभी ग्राहकों को स्वचालित रूप से फिर से कनेक्ट और पुनर्निर्माण करेगा। यह बॉक्स के बाहर क्लस्टर और असफल समर्थन भी प्रदान करता है। कोशिश करो।

+11

" बेहद सावधान "? वह किस तरह का अस्पष्ट खतरा है? EasyNetQ यहां एक बिल्कुल उचित सुझाव है। अगर लोग असहमत हैं, तो डाउनवोट बटन यही है। यह संभावना नहीं है कि सुझाव को दूसरा विचार दिया गया होगा कि उसने अपनी लेखनी को अस्वीकार करने की सौजन्य भी नहीं की थी। मैं अपने घोड़े पर उस ऊंचे सवारी के बारे में बेहद सावधान रहूंगा। –