protected override void ProcessEvent()
        {
            var channelGroup  = _slaves.Channels["slave"];
            var resolvedEvent = _message.Data;
            var position      = _message.CheckpointTag;

            var streamId = TransformCatalogEvent(position, resolvedEvent);

            if (string.IsNullOrEmpty(streamId))
            {
                CompleteProcessing(position);
            }
            else
            {
                _loadBalancer.ScheduleTask(
                    streamId, (streamId_, workerIndex) =>
                {
                    var channel     = channelGroup[workerIndex];
                    _spoolRequestId = _spoolProcessingResponseDispatcher.PublishSubscribe(
                        channel.PublishEnvelope,
                        new ReaderSubscriptionManagement.SpoolStreamReading(
                            channel.SubscriptionId, _correlationId, streamId_, resolvedEvent.PositionSequenceNumber,
                            _limitingCommitPosition), this);
                });
            }
        }
        protected override void ProcessEvent()
        {
            var channelGroup  = _slaves.Channels["slave"];
            var resolvedEvent = _message.Data;
            var streamId      = SystemEventTypes.StreamReferenceEventToStreamId(resolvedEvent.EventType, resolvedEvent.Data);

            _loadBalancer.ScheduleTask(
                streamId, (streamId_, workerIndex) =>
            {
                var channel     = channelGroup[workerIndex];
                _spoolRequestId = _spoolProcessingResponseDispatcher.PublishSubscribe(
                    channel.PublishEnvelope,
                    new ReaderSubscriptionManagement.SpoolStreamReading(
                        channel.SubscriptionId, Guid.NewGuid(), streamId_, resolvedEvent.PositionSequenceNumber,
                        _limitingCommitPosition), this);
            });
        }