public async Task Process(IEnumerable <OutgoingMessage> messages, OutgoingPipelineAction next) { foreach (var header in providers.GetOutgoingHeaders()) { foreach (var message in messages) { message.Headers.AddIfMissing(header); } } await next(messages) .ConfigureAwait(false); }
public Task Process(IEnumerable <OutgoingMessage> messages) { if (pipelineStartingAction == null) { lock (initialisationLock) { if (pipelineStartingAction == null) { pipelineStartingAction = BuildPipeline(); } } } return(pipelineStartingAction.Invoke(messages)); }
public Task Process(IEnumerable <OutgoingMessage> messages, OutgoingPipelineAction nextAction) { if (logger.IsEnabled(logLevel)) { foreach (var message in messages) { var correlationId = message.Headers.GetValueOrDefault(SharedConstants.CorrelationIdHeaderName); var typeName = message.MessageTypeNames.First(); logger.Log( logLevel, $"SENDING {typeName} (id={message.Id}; correlationId={correlationId})"); } } return(nextAction(messages)); }
private OutgoingPipelineAction BuildPipeline() { OutgoingPipelineAction lastAction = messageSink.Sink; var nextAction = lastAction; foreach (var behaviour in behaviours.Reverse()) { var capturedNextAction = nextAction; nextAction = (messages) => behaviour.Process(messages, capturedNextAction); } foreach (var behaviour in behaviours) { logger.LogDebug($"Adding {behaviour.GetType().Name} to outgoing pipeline."); } return(nextAction); }
public async Task PassSinkAsLastAction() { OutgoingPipelineAction capturedNextAction = null; mockBehaviour .Setup(m => m.Process(It.IsAny <IEnumerable <OutgoingMessage> >(), It.IsAny <OutgoingPipelineAction>())) .Returns(Task.CompletedTask) .Callback <IEnumerable <OutgoingMessage>, OutgoingPipelineAction>( (capturedMessages, nextAction) => { capturedNextAction = nextAction; }); await pipeline .Process(messages) .ConfigureAwait(false); await capturedNextAction(messages) .ConfigureAwait(false); mockSink.Verify(m => m.Sink(messages), Times.Once); }