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);
        }
Exemple #2
0
        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));
        }
Exemple #4
0
        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);
        }