Disruptor.NET メッセージング フレームワークの使用方法を学習しようとしていますが、実用的な例が見つかりません。それがどのように機能するかについての写真付きの記事がかなりありますが、実際に行ってメソッドを実装する方法を示している場所を見つけることができません. 例は何でしょうか?
質問する
13800 次
2 に答える
32
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<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);
}
}
}
}
于 2012-04-02T16:42:27.443 に答える
3
Disruptor パターンに関する詳細なブログ記事The Latency Issueがあります。Disruptor の開始方法と使用方法を詳細に示します。
于 2012-11-27T13:12:00.547 に答える