public static RabbitMQChannelOptionsBuilder DeclareExchange(
            this RabbitMQChannelOptionsBuilder builder,
            string exchange,
            string type,
            bool durable    = false,
            bool autoDelete = false,
            IDictionary <string, object> arguments = null,
            Action <RabbitMQExchangeOptionsBuilder> optionsAction = null)
        {
            if (exchange == null)
            {
                throw new ArgumentNullException(nameof(exchange));
            }

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

            builder.ExchangesOptionsFactories.Add(() =>
            {
                var exchangeBuilder = new RabbitMQExchangeOptionsBuilder(exchange, type, durable, autoDelete, arguments);
                optionsAction?.Invoke(exchangeBuilder);
                return(exchangeBuilder.Build());
            });

            return(builder);
        }
        public static RabbitMQChannelOptionsBuilder MapRoute <TMessage>(this RabbitMQChannelOptionsBuilder builder, string defaultRoutingKey)
        {
            var typeOptions = builder.MessageTypeOptionsProvider.Get <TMessage>();

            typeOptions.DefaultRoutingKey = defaultRoutingKey;

            return(builder);
        }
        public static RabbitMQChannelOptionsBuilder Map <TMessage>(this RabbitMQChannelOptionsBuilder builder, Func <TMessage, IMessageContent> formatter)
        {
            var typeOptions = builder.MessageTypeOptionsProvider.Get <TMessage>();

            typeOptions.Formatter = formatter == null
                ? (Func <object, IMessageContent>)null
                : (src) => formatter((TMessage)src);

            return(builder);
        }
        public static RabbitMQChannelOptionsBuilder Subscribe(this RabbitMQChannelOptionsBuilder builder, Type handlerType)
        {
            if (!MessageHandlersLoader.IsMessageHandler(handlerType))
            {
                throw new ArgumentException("The supplied type is not a valid message handler.", nameof(handlerType));
            }

            builder.SubscribersFactories.Add(services => MessageHandlersLoader.BuildMessageHandler(services, handlerType));

            return(builder);
        }
        public static RabbitMQChannelOptionsBuilder Subscribe(this RabbitMQChannelOptionsBuilder builder, Assembly assembly)
        {
            var subscriberFactories = MessageHandlersLoader.LoadFromAssembly(assembly);

            foreach (var subscriberFactory in subscriberFactories)
            {
                builder.SubscribersFactories.Add(subscriberFactory);
            }

            return(builder);
        }
        public static RabbitMQChannelOptionsBuilder MapRoute <TMessage>(this RabbitMQChannelOptionsBuilder builder, string defaultRoutingKey, string defaultExchange, Func <TMessage, IMessageContent> formatter)
        {
            var typeOptions = builder.MessageTypeOptionsProvider.Get <TMessage>();

            typeOptions.DefaultExchange   = defaultExchange;
            typeOptions.DefaultRoutingKey = defaultRoutingKey;
            typeOptions.Formatter         = formatter == null
                ? (Func <object, IMessageContent>)null
                : (src) => formatter((TMessage)src);

            return(builder);
        }
        public static RabbitMQChannelOptionsBuilder DeclareQueue(
            this RabbitMQChannelOptionsBuilder builder,
            string queue    = "",
            bool durable    = false,
            bool exclusive  = true,
            bool autoDelete = true,
            IDictionary <string, object> arguments             = null,
            Action <RabbitMQQueueOptionsBuilder> optionsAction = null)
        {
            builder.QueuesOptionsFactories.Add(() =>
            {
                var queueBuilder = new RabbitMQQueueOptionsBuilder(queue, durable, exclusive, autoDelete, arguments);
                optionsAction?.Invoke(queueBuilder);
                return(queueBuilder.Build());
            });

            return(builder);
        }
コード例 #8
0
        public static RabbitMQChannelOptionsBuilder AddRequestReply(this RabbitMQChannelOptionsBuilder builder, AcknowledgeMode acknowledgeMode, ExceptionMode exceptionMode)
        {
            RequestReplyController controller = null;

            builder
            .DeclareQueue(queueBuilder => queueBuilder
                          .OnDeclare(queue => Task.Run(() => controller = new RequestReplyController(queue.Name)))
                          .Subscribe(acknowledgeMode, exceptionMode, delivery => controller.OnDelivery(delivery))
                          )
            .Map <RequestReplyModel>(model => {
                var context = controller.Request(model.SourceContent);

                model.Context = context;

                return(context.RequestContent);
            });

            return(builder);
        }
        public static RabbitMQBusServiceOptionsBuilder AddChannel(this RabbitMQBusServiceOptionsBuilder builder, object tag, Action <RabbitMQChannelOptionsBuilder> optionsAction)
        {
            if (optionsAction == null)
            {
                throw new ArgumentNullException(nameof(optionsAction));
            }

            if (tag == null)
            {
                tag = new object();
            }

            builder.ChannelsOptionsFactories.Add((messageTypeOptionsProviderBase) => {
                var channelOptionsBuilder = new RabbitMQChannelOptionsBuilder(builder.Services, tag, messageTypeOptionsProviderBase);
                optionsAction(channelOptionsBuilder);
                return(channelOptionsBuilder.Build());
            });

            return(builder);
        }
 public static RabbitMQChannelOptionsBuilder Subscribe <THandler>(this RabbitMQChannelOptionsBuilder builder)
     where THandler : IMessageHandler <RabbitMQDelivery>
 => builder.Subscribe(typeof(THandler));
コード例 #11
0
 public static RabbitMQChannelOptionsBuilder AddRequestReply(this RabbitMQChannelOptionsBuilder builder, AcknowledgeMode acknowledgeMode)
 => builder.AddRequestReply(acknowledgeMode, ExceptionModeAttribute.DefaultMode);
        public static RabbitMQChannelOptionsBuilder PrefetchPerConsumer(this RabbitMQChannelOptionsBuilder builder, ushort count)
        {
            builder.ConsumerPrefetchCount = count;

            return(builder);
        }
 public static RabbitMQChannelOptionsBuilder DeclareQueue(this RabbitMQChannelOptionsBuilder builder, Action <RabbitMQQueueOptionsBuilder> optionsAction)
 => builder.DeclareQueue(
     queue: "",
     optionsAction: optionsAction
     );