public override Task InvokeAsync(IPipeContext context, CancellationToken token)
        {
            var requestType  = context.GetRequestMessageType();
            var responseType = context.GetResponseMessageType();

            if (requestType == null)
            {
                throw new ArgumentNullException(nameof(requestType));
            }
            if (responseType == null)
            {
                throw new ArgumentNullException(nameof(responseType));
            }

            var defaultCfg = _factory.Create(requestType, responseType);

            var builder = new RequestConfigurationBuilder(defaultCfg);
            var action  = context.Get <Action <IRequestConfigurationBuilder> >(PipeKey.ConfigurationAction);

            action?.Invoke(builder);
            var requestConfig = builder.Config;

            context.Properties.TryAdd(RequestKey.Configuration, requestConfig);
            context.Properties.TryAdd(PipeKey.PublisherConfiguration, requestConfig.Request);
            context.Properties.TryAdd(PipeKey.ConsumerConfiguration, requestConfig.Response);
            context.Properties.TryAdd(PipeKey.ConsumeConfiguration, requestConfig.Response.Consume);
            return(Next.InvokeAsync(context, token));
        }
Beispiel #2
0
        public RequestConfiguration GetConfiguration(Type requestType, Type responseType, Action <IRequestConfigurationBuilder> configuration)
        {
            // leverage direct reply to: https://www.rabbitmq.com/direct-reply-to.html
            var replyQueueConfig = new QueueConfiguration
            {
                QueueName  = _directReplyTo,
                AutoDelete = true,
                Durable    = false,
                Exclusive  = true
            };

            var exchangeConfig = new ExchangeConfiguration(_clientConfig.Exchange)
            {
                ExchangeName = _conventions.ExchangeNamingConvention(requestType)
            };

            var defaultConfig = new RequestConfiguration
            {
                ReplyQueue           = replyQueueConfig,
                Exchange             = exchangeConfig,
                RoutingKey           = _conventions.QueueNamingConvention(requestType),
                ReplyQueueRoutingKey = replyQueueConfig.QueueName
            };

            var builder = new RequestConfigurationBuilder(defaultConfig);

            configuration?.Invoke(builder);
            return(builder.Configuration);
        }