Пример Disruptor.NET - PullRequest
       13

Пример Disruptor.NET

24 голосов
/ 14 января 2012

Я пытаюсь научиться использовать среду обмена сообщениями Disruptor.NET и не могу найти практических примеров. Есть довольно много статей с картинками о том, как это работает, но я не могу найти нигде, что действительно идет и показывает вам, как реализовать методы. Что было бы примером?

Ответы [ 2 ]

29 голосов
/ 02 апреля 2012

Разочаровавшись, что я не смог найти работоспособный «Hello World» для Disruptor-net, я возился, пока не заработал один - см. Ниже.Надеюсь, это довольно очевидно.Строки Console.WriteLine удобны для наблюдения за тем, как все работает - например, RingBuffer создает каждый экземпляр записи при запуске (что имеет смысл).

Надеюсь, что это поможет любому, кто ищет помощь в работе Disruptor.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);
            }
        }
    }
}
3 голосов
/ 27 ноября 2012

В шаблоне Disruptor есть подробное сообщение в блоге, Latency Issue . В нем подробно показано, как начать работу и использовать Disruptor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...