Disruptor.NET示例

我正在尝试学习如何使用Disruptor.NET消息框架,我找不到任何实际的例子。 有很多文章都有关于它是如何工作的图片,但是我找不到任何实际的文章,并向您展示如何实现这些方法。 会是什么样的例子?

感到沮丧的是,我找不到Disruptor-net的可行的“Hello World”,在我找到一个工作之前,我蹒跚学步 – 见下文。 希望它是相当不言自明的。 Console.WriteLine行很方便用于查看操作的方式 – 例如,RingBuffer在启动时创建每个条目实例(这是有意义的)。

希望这有助于任何寻求.NET上的Disruptor帮助的人。

 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 { 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(() => 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); } } } } 

关于Disruptor模式, Latency Issue的详细博客文章。 它演示了如何开始并详细使用Disruptor。