2012-01-14 2 views
23

Disruptor.NET 메시징 프레임 워크를 사용하는 방법을 배우려고하는데 실용적인 예제를 찾을 수 없습니다. 어떻게 작동하는지에 대한 사진이있는 꽤 많은 기사가 있지만 실제로 갈 곳을 찾지 못하고 메서드를 구현하는 방법을 보여줍니다. 예를 들면?Disruptor.NET 예제

+0

이 질문을 통해 아직 보지 못한 몇 가지 정보를 얻을 수 있습니다. http://stackoverflow.com/questions/6933347/how-should-one-use-disruptor-disruptor-pattern-to-build-real- world-message-sys –

+0

[공식 프로젝트 위키] (http://code.google.com/p/disruptor-net/w/list)에는 몇 가지 정보가 있습니다. – caesay

+0

그들의 코드 예제가 오래된 것 같습니다. 예를 들어 현재 빌드에서 "IBatchHandler"인터페이스를 찾을 수없고 RingBuffer의 매개 변수가 완전히 다른 매개 변수를 가진 것처럼 보입니다. 그것은 공식 사이트가 GitHub로 이동했지만 사이트에서 추가 예제/문서를 찾을 수없는 것 같습니다 (하지만 내가 제대로하고 있는지 모르겠습니다) - https://github.com/odeheurles/ Disruptor-net # readme – William

답변

28

Disruptor-net에 대해 'Hello World'를 찾을 수 없다는 사실에 좌절감을 느꼈습니다. 다행히도 그것은 자명하다. Console.WriteLine 라인은 물건이 어떻게 작동하는지보기에 편리합니다. 예를 들어, RingBuffer가 시작할 때 각 엔트리 인스턴스를 만듭니다 (이는 의미가 있습니다).

희망이 있으면 Disruptor on .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

또한 메모를 추가하여 실행할 수 있습니까? 어떤 DLL을 프로젝트에 추가해야합니까? 어딘가에서 다운로드해야합니까, 아니면 직접 제작해야합니까? – javapowered

+0

도 예제를 탐색 할 수 있습니까? 왜 표준 .net 라이브러리보다 낫지? 얼마나 많은 스레드가 관련되어 있습니까? 딱 하나만? 스레드 생성을 볼 수 없습니다. – javapowered

+0

Disruptor 패턴을 사용하는 대부분의 사람들은 3 단계 파이프 라인을 사용하고 있기 때문에 Input Disruptor 및 Output Disruptor가있는 예제와 함께 사용하면 좋습니다. – Fred

2

스럽 패턴에 대한 자세한 블로그 게시물이 있습니다, The Latency Issue. Disruptor를 시작하고 사용하는 방법을 자세히 보여줍니다.

+1

이 링크는 오래되었습니다. 새 링크는 http://www.tradesharp.se/over-6-million-transactions-per-second-in-a-real-time-system-an-out-of-the-box-approach/ –

+0

새 링크입니다. 너무 오래되었습니다. – Ozgur