public void Establish()
 {
     _mapper        = new HeartbeatReplyCommandMessageMapper();
     _request       = new HeartbeatReply("Test.Hostname", new ReplyAddress(TOPIC, _correlationId));
     _firstConsumer = new RunningConsumer(new ConnectionName("Test.Connection"), ConsumerState.Open);
     _request.Consumers.Add(_firstConsumer);
     _secondConsumer = new RunningConsumer(new ConnectionName("More.Consumers"), ConsumerState.Shut);
     _request.Consumers.Add(_secondConsumer);
 }
Пример #2
0
        public HeartbeatReplyToMessageMapperTests()
        {
            _mapper  = new HeartbeatReplyCommandMessageMapper();
            _request = new HeartbeatReply("Test.Hostname", new ReplyAddress(TOPIC, _correlationId));
            var firstConsumer = new RunningConsumer(new ConsumerName("Test.Consumer1"), ConsumerState.Open);

            _request.Consumers.Add(firstConsumer);
            var secondConsumer = new RunningConsumer(new ConsumerName("More.Consumers2"), ConsumerState.Shut);

            _request.Consumers.Add(secondConsumer);
        }
Пример #3
0
        private void StopConsumer(RunningConsumer runningConsumer)
        {
            if (runningConsumer.Subscription == null)
            {
                return;
            }

            _logger.Information("Stopping {Consumer} subscribed to {StreamName} in group {GroupName}",
                                runningConsumer.Consumer.GetType().Name, runningConsumer.Consumer.StreamName, runningConsumer.Consumer.GroupName);

            runningConsumer.Subscription.Stop(TimeSpan.FromSeconds(10));
        }
Пример #4
0
        private void StopConsumer(RunningConsumer runningProjection)
        {
            if (runningProjection.Subscription == null)
            {
                return;
            }

            _logger.Information("Stopping {Consumer} subscribed to {StreamName}",
                                runningProjection.Consumer.GetType().Name, runningProjection.Consumer.StreamName);

            runningProjection.Subscription.Stop();
        }
Пример #5
0
        private async Task StartConsumerAsync(RunningConsumer runningConsumer)
        {
            var consumerId = GetConsumerId(runningConsumer.Consumer);

            _logger.Information("Starting {Consumer} subscribed to {StreamName} in group {GroupName}",
                                runningConsumer.Consumer.GetType().Name, runningConsumer.Consumer.StreamName, runningConsumer.Consumer.GroupName);

            var settings = CatchUpSubscriptionSettings.Default;

            runningConsumer.Subscription = await _connection.ConnectToPersistentSubscriptionAsync(
                runningConsumer.Consumer.StreamName,
                runningConsumer.Consumer.GroupName,
                OnEventAppeared(runningConsumer.Consumer),
                OnSubscriptionDropped(runningConsumer),
                autoAck : false,
                bufferSize : _settings.PersistentSubscriptionBufferSize.GetValueOrDefault(DefaultBufferSize)
                );
        }
Пример #6
0
        private async Task StartConsumerAsync(RunningConsumer runningConsumer)
        {
            var  consumerId = GetConsumerId(runningConsumer.Consumer);
            long?checkpoint = await _checkpointManager.LoadCheckpointAsync(consumerId);

            _logger.Information("Starting {Consumer} subscribed to {StreamName} from Checkpoint #{Checkpoint}",
                                runningConsumer.Consumer.GetType().Name, runningConsumer.Consumer.StreamName, checkpoint);

            var settings = CatchUpSubscriptionSettings.Default;

            runningConsumer.Subscription = _connection.SubscribeToStreamFrom(
                runningConsumer.Consumer.StreamName,
                checkpoint,
                settings,
                OnEventAppeared(runningConsumer.Consumer),
                OnLiveProcessingStarted(runningConsumer.Consumer),
                OnSubscriptionDropped(runningConsumer));
        }
Пример #7
0
        private Action <EventStorePersistentSubscriptionBase, SubscriptionDropReason, Exception> OnSubscriptionDropped(RunningConsumer runningConsumer)
        {
            return((sub, reason, exception) =>
            {
                if (!SkipStopReasons.Contains(reason))
                {
                    try
                    {
                        sub.Stop(TimeSpan.FromSeconds(SubscriptionStopTimeoutSeconds));
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, "Error stopping persistent subscription to {StreamName} in group {GroupName} with reason {Reason}",
                                      runningConsumer.Consumer.StreamName, runningConsumer.Consumer.GroupName, reason.ToString());
                    }
                }

                if (!_stopping)
                {
                    _logger.Error(exception, "{Consumer} dropped subscription to {StreamName} in group {GroupName} with reason {Reason}",
                                  GetConsumerId(runningConsumer.Consumer), runningConsumer.Consumer.StreamName, runningConsumer.Consumer.GroupName, reason.ToString());

                    if (reason == SubscriptionDropReason.EventHandlerException)
                    {
                        _logger.Fatal(exception, "Subscription to {StreamName} in group {GroupName} has been dropped due to an exception. Please restart", runningConsumer.Consumer.StreamName, runningConsumer.Consumer.GroupName);
                    }
                    else
                    {
                        StartConsumerAsync(runningConsumer).GetAwaiter().GetResult();
                    }
                }
            });
        }
Пример #8
0
        private Action <EventStoreCatchUpSubscription, SubscriptionDropReason, Exception> OnSubscriptionDropped(RunningConsumer runningConsumer)
        {
            return((sub, reason, exception) => {
                sub.Stop();

                if (!_stopping)
                {
                    _logger.Error(exception, "{Consumer} dropped subscription to {StreamName} with reason {Reason}",
                                  GetConsumerId(runningConsumer.Consumer), runningConsumer.Consumer.StreamName, reason.ToString());

                    StartConsumerAsync(runningConsumer).GetAwaiter().GetResult();
                }
            });
        }