Exemple #1
0
        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();
        }
Exemple #3
0
        public static void Class_Init(TestContext ctx)
        {
            _disruptor = NewDisruptor();

            _disruptor.HandleEventsWith(new SummingEventHandler());

            _ringbuffer = _disruptor.Start();

            _producer = new EventProducerWithTranslator(_ringbuffer);
        }
Exemple #4
0
        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);
        }
Exemple #6
0
        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();
        }
Exemple #10
0
        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);
            }
        }