Ejemplo n.º 1
0
        private void InitializeCommand()
        {
            var rootRebuilder         = _provider.GetRequiredService <IAggregateRootRebuilder>();
            var loggerFactory         = _provider.GetRequiredService <ILoggerFactory>();
            var commandHandlerFactory = _provider.GetRequiredService <ICommandHandlerFactory>();
            var eventStore            = _provider.GetRequiredService <IEventStore>();
            var eventBus        = _provider.GetRequiredService <IEventBus>();
            var commandRegister = _provider.GetRequiredService <ICommandRegister>();

            IContextCache contextCache = _provider.GetRequiredService <IContextCache>();

            var size         = _options.CommandQueueSize;
            var waitStrategy = new SpinWaitWaitStrategy();

            var queue = RingBuffer <WrapMessage <CommandMessage> > .CreateMultiProducer(() => new WrapMessage <CommandMessage>(), size, waitStrategy);

            var barrier = queue.NewBarrier();

            var commandMappingProvider = _provider.GetService <ICommandMappingProvider>();

            if (commandMappingProvider != null)
            {
                var cacheHandler = new RingCommandCacheHandler(
                    commandMappingProvider
                    , rootRebuilder
                    , contextCache
                    , loggerFactory
                    , _options.CommandMaxHandleCount);


                var cacheConsumer = BatchEventProcessorFactory.Create <WrapMessage <CommandMessage> >(queue, barrier, cacheHandler);

                barrier = queue.NewBarrier(cacheConsumer.Sequence);
                consumers.Add(cacheConsumer);
            }


            var executorHandler = new RingCommandBusinessHandler(
                contextCache
                , commandHandlerFactory
                , eventStore
                , eventBus
                , commandRegister
                , rootRebuilder
                , loggerFactory
                , _options.CommandMaxHandleCount
                );

            var executorConsumer = BatchEventProcessorFactory.Create <WrapMessage <CommandMessage> >(queue, barrier, executorHandler);

            consumers.Add(executorConsumer);

            queue.AddGatingSequences(executorConsumer.Sequence);

            _commandQueue = queue;
        }
Ejemplo n.º 2
0
        private void InitializeEvent()
        {
            var snapshootStoreFactory = _provider.GetRequiredService <ISnapshootStoreFactory>();
            var loggerFactory         = _provider.GetRequiredService <ILoggerFactory>();
            var eventHandlerFactory   = _provider.GetRequiredService <IEventHandlerFactory>();
            var snapshootCache        = _provider.GetRequiredService <ISnapshootCache>();
            var eventRegister         = _provider.GetRequiredService <IEventRegister>();
            var assemblyProvider      = _provider.GetRequiredService <IAssemblyProvider>();
            var eventRebuildHandler   = _provider.GetRequiredService <IEventRebuildHandler>();
            var subscribeEventStore   = _provider.GetRequiredService <ISubscribeEventStore>();
            var eventHandleSubject    = _provider.GetRequiredService <IEventHandleSubject>();

            var size         = _options.EventQueueSize;
            var waitStrategy = new SpinWaitWaitStrategy();

            var queue = RingBuffer <WrapMessage <IEvent> > .CreateMultiProducer(() => new WrapMessage <IEvent>(), size, waitStrategy);

            var barrier = queue.NewBarrier();

            var snapshootHandler = new RingEventSnapshootHandler(
                assemblyProvider
                , snapshootStoreFactory
                , eventRebuildHandler
                , subscribeEventStore
                , snapshootCache
                , loggerFactory
                , eventHandleSubject
                , _options.EventMaxHandleCount);

            var snapshootConsumer = BatchEventProcessorFactory.Create <WrapMessage <IEvent> >(queue, barrier, snapshootHandler);

            barrier = queue.NewBarrier(snapshootConsumer.Sequence);
            consumers.Add(snapshootConsumer);


            var executorHandler = new RingEventBusinessHandler(
                eventRegister
                , eventHandlerFactory
                , subscribeEventStore
                , loggerFactory
                , eventHandleSubject
                , _options.EventMaxHandleCount);

            var executorConsumer = BatchEventProcessorFactory.Create <WrapMessage <IEvent> >(queue, barrier, executorHandler);


            consumers.Add(executorConsumer);

            queue.AddGatingSequences(executorConsumer.Sequence);

            _eventQueue = queue;
        }