2012-01-14 14 views
23

मैं समझने की कोशिश कर रहा हूं कि Disruptor.NET मैसेजिंग फ्रेमवर्क का उपयोग कैसे करें, और मुझे कोई व्यावहारिक उदाहरण नहीं मिल रहा है। चित्रों के साथ वहां कुछ लेख हैं जो यह काम करता है, लेकिन मुझे वास्तव में कहीं भी नहीं मिल रहा है और आपको दिखाता है कि विधियों को कैसे कार्यान्वित किया जाए। एक उदाहरण क्या होगा?Disruptor.NET उदाहरण

+0

यह प्रश्न आपको कुछ ऐसी जानकारी तक ले जा सकता है जो आपने अभी तक नहीं देखा है: http://stackoverflow.com/questions/6933347/how-should-one-use-disruptor-disruptor-pattern-to-build-real- विश्व संदेश-sys –

+0

[आधिकारिक परियोजना विकी] (http://code.google.com/p/disruptor-net/w/list) में कुछ जानकारी है। – caesay

+0

उनके बारे में एक कोड उदाहरण पुराना प्रतीत होता है - उदाहरण के लिए, मुझे वर्तमान निर्माण में कहीं भी इंटरफ़ेस "आईबैचहैंडलर" नहीं मिल रहा है और रिंगबफर के पैरामीटर पूरी तरह से अलग-अलग पैरामीटर हैं। ऐसा लगता है कि आधिकारिक साइट गिटहब में चली गई है लेकिन मुझे साइट पर कोई अतिरिक्त उदाहरण/दस्तावेज नहीं मिल रहे हैं (लेकिन मुझे यकीन नहीं है कि मैं इसे सही तरीके से कर रहा हूं) - https://github.com/odeheurles/ विघटनकर्ता-नेट # रीडेम – William

उत्तर

28

निराश है कि मुझे विघटनकारी-नेट के लिए एक काम करने योग्य 'हैलो वर्ल्ड' नहीं मिल सका, मैं एक काम करने तक चारों ओर झुका हुआ - नीचे देखें। उम्मीद है कि यह काफी आत्म-व्याख्यात्मक है। Console.WriteLine लाइनें यह देखने के लिए आसान हैं कि चीजें कैसे काम करती हैं - उदाहरण के लिए, कि रिंगबफर स्टार्ट-अप (जो समझ में आता है) पर प्रत्येक प्रविष्टि उदाहरण बनाता है।

आशा है कि यह किसी को भी .NET पर विघटनकर्ता के साथ मदद की तलाश में मदद करेगा।

using System; 
using System.Linq; 
using System.Threading; 
using System.Threading.Tasks; 
using Disruptor; 
using Disruptor.Dsl; 

namespace DisruptorTest 
{ 
    public sealed class ValueEntry 
    { 
     public long Value { get; set; } 

     public ValueEntry() 
     { 
      Console.WriteLine("New ValueEntry created"); 
     } 
    } 

    public class ValueAdditionHandler : IEventHandler<ValueEntry> 
    { 
     public void OnNext(ValueEntry data, long sequence, bool endOfBatch) 
     { 
      Console.WriteLine("Event handled: Value = {0} (processed event {1}", data.Value, sequence); 
     } 
    } 

    class Program 
    { 
     private static readonly Random _random = new Random(); 
     private static readonly int _ringSize = 16; // Must be multiple of 2 

     static void Main(string[] args) 
     { 
      var disruptor = new Disruptor.Dsl.Disruptor<ValueEntry>(() => new ValueEntry(), _ringSize, TaskScheduler.Default); 

      disruptor.HandleEventsWith(new ValueAdditionHandler()); 

      var ringBuffer = disruptor.Start(); 

      while (true) 
      { 
       long sequenceNo = ringBuffer.Next(); 

       ValueEntry entry = ringBuffer[sequenceNo]; 

       entry.Value = _random.Next(); 

       ringBuffer.Publish(sequenceNo); 

       Console.WriteLine("Published entry {0}, value {1}", sequenceNo, entry.Value); 

       Thread.Sleep(250); 
      } 
     } 
    } 
} 
+0

क्या आप यह भी नोट कर सकते हैं कि इसे कैसे चलाया जाए? मुझे एक परियोजना में क्या डीएल जोड़ना चाहिए? क्या मुझे उन्हें कहीं डाउनलोड करना चाहिए या मुझे खुद को बनाना चाहिए? – javapowered

+0

कोई भी उदाहरण का स्पष्टीकरण कर सकता है? यह मानक .net पुस्तकालयों से बेहतर क्यों है? कितने धागे शामिल हैं? सिर्फ एक? मुझे कोई थ्रेड सृजन नहीं दिख रहा है। – javapowered

+0

विघटन पैटर्न का उपयोग करने वाले अधिकांश लोग तीन चरण पाइपलाइन का उपयोग करेंगे, इसलिए यह एक इनपुट विघटनकर्ता और आउटपुट विघटनकर्ता के साथ एक उदाहरण के साथ अच्छा होगा। – Fred

2

वहाँ Disruptor पैटर्न पर एक विस्तृत ब्लॉग पोस्ट है, The Latency Issue। यह दर्शाता है कि कैसे शुरू किया जाए और विघटनकर्ता को विस्तार से उपयोग करें।

+1

के एकाधिक नहीं। यह लिंक पुराना है। नया लिंक http://www.tradesharp.se/over-6-million-transactions-per-second-in-a-real-time-system-an-out-of-the-box-approach/ –

+0

नया लिंक है भी बेवकूफ है। – Ozgur