public async Task ConsumeAsync(string eventType, ResolvedEvent resolvedEvent) { if (string.IsNullOrWhiteSpace(eventType)) { throw new ArgumentException("Event type required", nameof(eventType)); } if (_settings.ReadOnly) { _logger.Debug("Received {EventType} #{EventNumber} from {StreamName} (Original Event: #{OriginalEventNumber})", resolvedEvent.Event.EventType, resolvedEvent.Event.EventNumber, resolvedEvent.Event.EventStreamId, resolvedEvent.OriginalEventNumber ); return; } var eventData = new EventData( resolvedEvent.Event.EventId, resolvedEvent.Event.EventType, true, resolvedEvent.Event.Data, resolvedEvent.Event.Metadata ); WriteResult result = default; using (_logger.OperationAt(LogEventLevel.Debug).Time("Replicating {EventType} #{EventNumber} from {StreamName} (Original Event: #{OriginalEventNumber})", resolvedEvent.Event.EventType, resolvedEvent.Event.EventNumber, resolvedEvent.Event.EventStreamId, resolvedEvent.OriginalEventNumber)) using (DittoMetrics.IODuration.WithIOLabels("eventstore", "ditto-destination", "append_to_stream").NewTimer()) { result = await _connection.AppendToStreamAsync( resolvedEvent.Event.EventStreamId, _settings.SkipVersionCheck?ExpectedVersion.Any : resolvedEvent.Event.EventNumber - 1, eventData ); } if (_ttl && result.NextExpectedVersion == 0) // New stream created { await SetStreamMetadataAsync(resolvedEvent.Event.EventStreamId); } if (_settings.ReplicationThrottleInterval.GetValueOrDefault() > 0) { await Task.Delay(_settings.ReplicationThrottleInterval.Value); } }