2013-02-25 43 views
5

के बीच स्विच करें मान लें कि हमारे पास 2 रेडिस सर्वर बैकप्लेन्स हैं, एक मास्टर के रूप में और दूसरा स्लेव के रूप में।सिग्नलआर - विभिन्न रेडिस बैकप्लेन

प्रत्येक वेब अनुप्रयोग आदेश जुड़ा ग्राहकों को सामग्री पुश करने के रूप में यह होता है में और ताकि उन्हें बैकप्लेन से कनेक्ट करने में SignalR उपयोग कर रहा है मैं Application_Start

GlobalHost.DependencyResolver.UseRedis(host, port, "", new[] {"signalr.key"}); 
RouteTable.Routes.MapHubs(); 

अब में उपयोग कर रहा हूँ मामले मास्टर में Redis Backplane विफल रहता है , मैं स्लेव रेडिस सर्वर को मास्टर को बढ़ावा देना चाहता हूं और वेब सर्वर से सभी मौजूदा कनेक्शन को नए मास्टर रेडिस सर्वर पर स्विच करना चाहता हूं।

आदेश दास सर्वर मास्टर बढ़ावा देने के लिए मैं निम्नलिखित कोड

using (var conn = new RedisConnection(host, port, allowAdmin: true)) 
{ 
    if (conn.ServerType != ServerType.Master) 
    { 
     conn.Open(); 
     var makeMaster = conn.Server.MakeMaster(); 
     var info = conn.Wait(conn.GetInfo()); 
     conn.Wait(makeMaster); 
    } 
} 

कि काम करने के लिए लगता है का उपयोग कर रहा हूँ।

क्या आप कृपया मेरी मदद कर सकते हैं कि मैं अपने वेब एप्लिकेशन को कैसे सूचित कर सकता हूं कि बैकप्लेन ने मेरे कनेक्ट किए गए ग्राहकों के बीच संचार बनाए रखने के लिए नए से कैसे कनेक्ट किया है?

उत्तर

0

हम सिग्नलआर विशेष रूप से का उपयोग नहीं करते हैं, लेकिन हमारे पास रेडिस का उपयोग करने के तरीके में कुछ समान है, खासकर जब नोड्स के बीच स्विचिंग करते हैं। विशेष रूप से, हम एक चैनल की सदस्यता लेने के लिए रेडिस पब/सब का उपयोग करते हैं, और मास्टर को बदलते समय हम उस चैनल को प्रसारित करते हैं।

हमारी कॉन्फ़िगरेशन छोटा अलग है, क्योंकि हम ConnectionUtils.Connect(...) पर आधारित सीमित कॉन्फ़िगरेशन संस्करण का उपयोग करते हैं। इसका अर्थ यह है कि हम ConnectionUtils के साथ वर्तमान मास्टर कौन सा पता लगाने की चिंताओं को संभालने के साथ कई नोड्स निर्दिष्ट कर सकते हैं। लेकिन आपके मामले में आप शायद पब/सब के हिस्से के रूप में नई मास्टर जानकारी प्रकाशित कर सकते हैं। मुझे यह भी ध्यान रखना चाहिए कि स्विचिंग मास्टर्स को संभालने के लिए बहुत से कोड (अधिसूचना के साथ) ConnectionUtils.SwitchMaster के पीछे लपेटा गया है। इसमें परिवर्तन का प्रसारण शामिल है, जिसे आप ConnectionUtils.SubscribeToMasterSwitch के माध्यम से सब्सक्राइब कर सकते हैं। एक मामूली कार्यान्वयन विस्तार के रूप में, इसके लिए उपयोग किया जाने वाला चैनल "__Booksleeve_MasterChanged" है - लेकिन अगर आप सार्वजनिक विधियों का उपयोग करते हैं तो यह अपारदर्शी है।

+0

यह मास्टर को स्विच करने के लिए भी काम करता है लेकिन फिर मुझे सिग्नलर को सूचित करने का कोई तरीका नहीं मिल रहा है कि बैकप्लेन में बदलाव आया था। शायद मुझे हब्स या कुछ और "रीमेप" करने की ज़रूरत है, लेकिन जो भी मैंने कोशिश की है वह काम नहीं कर रहा है। – ppolyzos