/// <summary> /// Process a <see cref="Store.CommittedEventStream"/>. /// </summary> /// <param name="committedEvents"><see cref="Store.CommittedEventStream"/> to process.</param> public void Process(Store.CommittedEventStream committedEvents) { foreach (var eventEnvelope in committedEvents.Events) { if (!_eventProcessorsByResourceIdentifier.ContainsKey(eventEnvelope.Metadata.Artifact)) { GatherEventProcessors(); } if (_eventProcessorsByResourceIdentifier.ContainsKey(eventEnvelope.Metadata.Artifact)) { var processors = _eventProcessorsByResourceIdentifier[eventEnvelope.Metadata.Artifact]; processors.ForEach(_ => _.Process(eventEnvelope.ToCommittedEventEnvelope(committedEvents.Sequence))); } } }
void AddToQueue(Store.CommittedEventStream committedEventStream) { var originalContext = committedEventStream.Events.First().Metadata.OriginalContext; _outbox.Enqueue(new Dolittle.Runtime.Events.Processing.CommittedEventStreamWithContext(committedEventStream, originalContext.ToExecutionContext(committedEventStream.CorrelationId)).ToProtobuf()); }
/// <summary> /// Processes /// </summary> /// <param name="committedEventStreamWithContext"></param> /// <returns></returns> public Task <CommitSequenceNumber> Process(CommittedEventStreamWithContext committedEventStreamWithContext) { try { var originatingSequence = committedEventStreamWithContext.EventStream.Sequence; var context = committedEventStreamWithContext.Context; var particleStream = committedEventStreamWithContext.EventStream; EventSourceVersion version = null; _executionContextManager.CurrentFor(context); using (var _ = _getEventStore()) { version = _.GetNextVersionFor(particleStream.Source.Key); } var versionedEventSource = new VersionedEventSource(version, new EventSourceKey(particleStream.Source.EventSource, particleStream.Source.Artifact)); var eventEnvelopes = new List <EventEnvelope>(); particleStream.Events.ForEach(_ => { _.Metadata.OriginalContext.CommitInOrigin = particleStream.Sequence; var envelope = new EventEnvelope( new EventMetadata( _.Id, new VersionedEventSource(version, new EventSourceKey(particleStream.Source.EventSource, particleStream.Source.Artifact)), _.Metadata.CorrelationId, _.Metadata.Artifact, _.Metadata.Occurred, _.Metadata.OriginalContext ), _.Event ); eventEnvelopes.Add(envelope); version = version.NextSequence(); }); var uncommittedEventStream = new Store.UncommittedEventStream( particleStream.Id, particleStream.CorrelationId, versionedEventSource, particleStream.Timestamp, new Store.EventStream(eventEnvelopes) ); _logger.Information("Commit events to store"); Store.CommittedEventStream committedEventStream = null; using (var _ = _getEventStore()) { committedEventStream = _.Commit(uncommittedEventStream); } SetOffset(_eventHorizonKey, originatingSequence); _logger.Information("Process committed events"); _processingHub.Process(committedEventStream); return(Task.FromResult(committedEventStream.Sequence)); } catch (Exception ex) { _logger.Error(ex, "Couldn't handle incoming commit"); return(Task.FromException <CommitSequenceNumber>(ex)); } }