Esempio n. 1
0
        public StorageReaderService(
            IPublisher bus,
            ISubscriber subscriber,
            IReadIndex readIndex,
            int threadCount,
            IReadOnlyCheckpoint writerCheckpoint,
            QueueStatsManager queueStatsManager)
        {
            Ensure.NotNull(bus, "bus");
            Ensure.NotNull(subscriber, "subscriber");
            Ensure.NotNull(readIndex, "readIndex");
            Ensure.Positive(threadCount, "threadCount");
            Ensure.NotNull(writerCheckpoint, "writerCheckpoint");

            _bus         = bus;
            _readIndex   = readIndex;
            _threadCount = threadCount;
            StorageReaderWorker[] readerWorkers      = new StorageReaderWorker[threadCount];
            InMemoryBus[]         storageReaderBuses = new InMemoryBus[threadCount];
            for (var i = 0; i < threadCount; i++)
            {
                readerWorkers[i]      = new StorageReaderWorker(bus, readIndex, writerCheckpoint, i);
                storageReaderBuses[i] = new InMemoryBus("StorageReaderBus", watchSlowMsg: false);
                storageReaderBuses[i].Subscribe <ClientMessage.ReadEvent>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <ClientMessage.ReadStreamEventsBackward>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <ClientMessage.ReadStreamEventsForward>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <ClientMessage.ReadAllEventsForward>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <ClientMessage.ReadAllEventsBackward>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <ClientMessage.FilteredReadAllEventsForward>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <ClientMessage.FilteredReadAllEventsBackward>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <StorageMessage.BatchLogExpiredMessages>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <StorageMessage.EffectiveStreamAclRequest>(readerWorkers[i]);
                storageReaderBuses[i].Subscribe <StorageMessage.StreamIdFromTransactionIdRequest>(readerWorkers[i]);
            }

            _workersMultiHandler = new MultiQueuedHandler(
                _threadCount,
                queueNum => new QueuedHandlerThreadPool(storageReaderBuses[queueNum],
                                                        string.Format("StorageReaderQueue #{0}", queueNum + 1),
                                                        queueStatsManager,
                                                        groupName: "StorageReaderQueue",
                                                        watchSlowMsg: true,
                                                        slowMsgThreshold: TimeSpan.FromMilliseconds(200)));
            _workersMultiHandler.Start();

            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadEvent, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadStreamEventsBackward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadStreamEventsForward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadAllEventsForward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadAllEventsBackward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.FilteredReadAllEventsForward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.FilteredReadAllEventsBackward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <StorageMessage.BatchLogExpiredMessages, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <StorageMessage.EffectiveStreamAclRequest, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <StorageMessage.StreamIdFromTransactionIdRequest, Message>());
        }
Esempio n. 2
0
        public StorageReaderService(IPublisher bus, ISubscriber subscriber, IReadIndex readIndex, int threadCount, ICheckpoint writerCheckpoint)
        {
            Ensure.NotNull(bus, "bus");
            Ensure.NotNull(subscriber, "subscriber");
            Ensure.NotNull(readIndex, "readIndex");
            Ensure.Positive(threadCount, "threadCount");
            Ensure.NotNull(writerCheckpoint, "writerCheckpoint");

            _bus         = bus;
            _readIndex   = readIndex;
            _threadCount = threadCount;

            var readerWorker     = new StorageReaderWorker(bus, readIndex, writerCheckpoint);
            var storageReaderBus = new InMemoryBus("StorageReaderBus", watchSlowMsg: false);

            storageReaderBus.Subscribe <ClientMessage.ReadEvent>(readerWorker);
            storageReaderBus.Subscribe <ClientMessage.ReadStreamEventsBackward>(readerWorker);
            storageReaderBus.Subscribe <ClientMessage.ReadStreamEventsForward>(readerWorker);
            storageReaderBus.Subscribe <ClientMessage.ReadAllEventsForward>(readerWorker);
            storageReaderBus.Subscribe <ClientMessage.ReadAllEventsBackward>(readerWorker);
            storageReaderBus.Subscribe <StorageMessage.CheckStreamAccess>(readerWorker);

            _workersMultiHandler = new MultiQueuedHandler(
                _threadCount,
                queueNum => new QueuedHandlerThreadPool(storageReaderBus,
                                                        string.Format("StorageReaderQueue #{0}", queueNum + 1),
                                                        groupName: "StorageReaderQueue",
                                                        watchSlowMsg: true,
                                                        slowMsgThreshold: TimeSpan.FromMilliseconds(200)));
            _workersMultiHandler.Start();

            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadEvent, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadStreamEventsBackward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadStreamEventsForward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadAllEventsForward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <ClientMessage.ReadAllEventsBackward, Message>());
            subscriber.Subscribe(_workersMultiHandler.WidenFrom <StorageMessage.CheckStreamAccess, Message>());
        }