private const int _ringSize = 16; // Must be multiple of 2 static void Main(string[] args) { var sw = new Stopwatch(); sw.Start(); var disruptor = new Disruptor.Dsl.Disruptor <MyValueEntry>(() => new MyValueEntry(), _ringSize, System.Threading.Tasks.TaskScheduler.Default); //Case A: 1 Producer - 2 Consumer (Steps Pipeline) disruptor.HandleEventsWith( new MyValueAdditionHandler()).Then( new MyLogHandler(@"C:\Disruptor.basic.log")); ////Case B: 1 Producer - 2 Consumer (multicast event) //disruptor.HandleEventsWith( // new MyValueAdditionHandler(), // new MyLogHandler(@"C:\Disruptor.basic.log")); var ringBuffer = disruptor.Start(); Simulator.SimulatePublishEvent(ringBuffer, 1000); sw.Stop(); Console.WriteLine($"elapsed {sw.ElapsedMilliseconds} ms"); Console.Read(); }
public static void Class_Init(TestContext ctx) { _disruptor = NewDisruptor(); _disruptor.HandleEventsWith(new SummingEventHandler()); _ringbuffer = _disruptor.Start(); }
public static void Class_Init(TestContext ctx) { _disruptor = NewDisruptor(); _disruptor.HandleEventsWith(new SummingEventHandler()); _ringbuffer = _disruptor.Start(); _producer = new EventProducerWithTranslator(_ringbuffer); }
public static void Class_Init(TestContext ctx) { _disruptor = NewDisruptor(); _disruptor .HandleEventsWith(new MockLogToDiskEventHandler()) .Then(new MockBusinessLogicEventHandler()); _ringbuffer = _disruptor.Start(); _producer = new EventProducerWithTranslator(_ringbuffer); }
public static void Class_Init(TestContext ctx) { _disruptor = NewDisruptor(); _disruptor.HandleEventsWith( new ThreadSleepRandomEventHandler(), new ThreadSleepConstantEventHandler()); _ringbuffer = _disruptor.Start(); _producer = new EventProducerWithTranslator(_ringbuffer); }
static void Main(string[] args) { var storageLocation = @"d:\test.log"; if (args.Length > 0) { storageLocation = args[0]; } var start = DateTime.Now; EventPublisher<TrackedObject> publisher = null; // will be initialized below, after ring buffer created var simulator = new Simulator(ObjectsCount, obj => { publisher.PublishEvent((entry, sequenceNo) => { entry.Latitude = obj.Latitude; entry.Longitude = obj.Longitude; entry.Id = obj.Id; return entry; }); }); var disruptor = new Disruptor.Dsl.Disruptor<TrackedObject>(() => new TrackedObject(), RingBufferSize, TaskScheduler.Default); var distanceHandler = new DistanceHandler(); var aknowledgementHandler = new AknowledgementHandler(simulator); var consoleLogHandler = new ConsoleLogHandler(); using (var persistHandler = new ObjectPersistHandler(storageLocation)) { disruptor.HandleEventsWith(persistHandler) .Then(consoleLogHandler, distanceHandler) .Then(aknowledgementHandler); var ringBuffer = disruptor.Start(); publisher = new EventPublisher<TrackedObject>(ringBuffer); simulator.PublishStartPositions(); Thread.Sleep(10000); simulator.Stop(); disruptor.Shutdown(); } Console.WriteLine(distanceHandler.GetSummary()); Console.WriteLine("Processed {0} events. Speed: {1:#.##} events per second.", simulator.MoveCount, simulator.MoveCount / (DateTime.Now - start).TotalSeconds); Console.ReadKey(); }
static void DemoDSLUnicast() { var disruptor = new Disruptor.Dsl.Disruptor <DataVO>(() => new DataVO(), (int)Math.Pow(2, 4), TaskScheduler.Default); disruptor.HandleEventsWith(new DataEventHandler("Handler1")); var ringBuffer = disruptor.Start(); var idx = 0; while (true) { var sequenceNo = ringBuffer.Next(); var data = ringBuffer[sequenceNo]; data.Value = idx++.ToString(); ringBuffer.Publish(sequenceNo); Thread.Sleep(250); } disruptor.Shutdown(); }
static void DemoDSLDisruptor() { var disruptor = new Disruptor.Dsl.Disruptor <DataVO>(() => new DataVO(), (int)Math.Pow(2, 4), TaskScheduler.Default); disruptor.HandleEventsWith(new DataEventHandler("Handler1")); var ringBuffer = disruptor.Start(); var sequenceNo = ringBuffer.Next(); var data = ringBuffer[sequenceNo]; data.Value = "Hello"; ringBuffer.Publish(sequenceNo); sequenceNo = ringBuffer.Next(); data = ringBuffer[sequenceNo]; data.Value = "World"; ringBuffer.Publish(sequenceNo); disruptor.Shutdown(); }
public LightweightEventBus(IOptions <LightweightEventBusOptions> options, IServiceScopeFactory scopeFactory) { _serviceScopeFactory = scopeFactory; _handler = new InternalDisruptorHandler(); _handler.OnConsumeEvent += OnConsumeEvent; var busOptions = options.Value; if (busOptions.OnProducing != null) { OnProducing = busOptions.OnProducing; } if (busOptions.OnProduced != null) { OnProduced = busOptions.OnProduced; } if (busOptions.OnProductError != null) { OnProductError = busOptions.OnProductError; } if (busOptions.OnConsuming != null) { OnConsuming = busOptions.OnConsuming; } if (busOptions.OnConsumed != null) { OnConsumed = busOptions.OnConsumed; } if (busOptions.OnConsumeError != null) { OnConsumeError = busOptions.OnConsumeError; } _disruptor = new Disruptor.Dsl.Disruptor <EventWrapper>( eventFactory: () => new EventWrapper(), ringBufferSize: busOptions.BufferSize, taskScheduler: TaskScheduler.Default, producerType: Disruptor.Dsl.ProducerType.Single, waitStrategy: new Disruptor.YieldingWaitStrategy()); _disruptor.HandleEventsWith(_handler); _ringBuffer = _disruptor.Start(); }
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(), new TestValueAdditionHandler()); 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); } }