상속: ISubscriberConfigurator
예제 #1
0
        private static string CreateQueue(IModel model, SubscriberConfigurator configurator)
        {
            QueueDeclareOk queueDeclare;

            var arguments = new Dictionary <string, object>();

            if (configurator.MaxPriority > 0)
            {
                arguments.Add("x-max-priority", configurator.MaxPriority);
            }

            if (!string.IsNullOrEmpty(configurator.QueueName))
            {
                if (configurator.AutoCreate)
                {
                    if (configurator.Durable)
                    {
                        // exclusive: Can only be accessed by the current connection. (default false)
                        // https://github.com/EasyNetQ/EasyNetQ/wiki/The-Advanced-API
                        model.QueueDeclare(configurator.QueueName, true, false, false, arguments);
                    }
                    else
                    {
                        model.QueueDeclare(configurator.QueueName, false, true, true, arguments);
                    }
                }

                return(configurator.QueueName);
            }

            queueDeclare = model.QueueDeclare("", false, true, true, arguments);

            return(queueDeclare.QueueName);
        }
예제 #2
0
        public SubscriberBase(IModel model, string queue, IBasicConsumer consumer, SubscriberConfigurator configurator)
        {
            _model = model;

            _queue = queue;

            _consumer     = consumer;
            _configurator = configurator;
        }
예제 #3
0
        private MessageConsumer CreateConsumer(IModel model, SubscriberConfigurator configurator)
        {
            if (configurator.TransactionalDelivery)
            {
                return(new TransactionalMessageConsumer(BusId, model, _messageHelper, _sendHelper, configurator.Serializers, configurator.ErrorSubscriber, configurator.TaskScheduler, configurator.ReceiveSelfPublish, configurator.NeverReply));
            }

            return(new MessageConsumer(BusId, model, _messageHelper, _sendHelper, configurator.Serializers, configurator.ErrorSubscriber, configurator.TaskScheduler, configurator.ReceiveSelfPublish, configurator.NeverReply));
        }
예제 #4
0
        public SubscriberBase(IModel model, string queue, IBasicConsumer consumer, SubscriberConfigurator configurator)
        {
            _model = model;

            _queue = queue;

            _consumer = consumer;
            _configurator = configurator;
        }
예제 #5
0
        public IReceiver CreateReceiver(Action <ISubscriberConfigurator> configure = null)
        {
            SubscriberConfigurator configurator = _createSubscriberConfigurator(configure);

            IModel model = _connection.CreateModel();

            string queue = CreateQueue(model, configurator);

            return(new Receiver(model, BusId, queue, _messageHelper, configurator));
        }
예제 #6
0
        private static string CreateQueue(IModel model, SubscriberConfigurator configurator)
        {
            if (!string.IsNullOrEmpty(configurator.QueueName))
            {
                return(configurator.QueueName);
            }

            QueueDeclareOk queueDeclare = model.QueueDeclare("", false, true, true, new Dictionary <string, object>());

            return(queueDeclare.QueueName);
        }
예제 #7
0
        private static SubscriberConfigurator CreateConfigurator(Action <ISubscriberConfigurator> configure)
        {
            SubscriberConfigurator configurator = new SubscriberConfigurator();

            if (configure != null)
            {
                configure(configurator);
            }

            return(configurator);
        }
예제 #8
0
        internal override IInputChannel OnCreateInputChannel(SubscriberConfigurator configurator)
        {
            IInputChannel inputChannel = CreateInputChannel(configurator.BufferManager, configurator.QueueName);

            if (inputChannel == null)
            {
                throw new NoIncomingConnectionAcceptedException();
            }

            return(inputChannel);
        }
예제 #9
0
        public IAsyncSubscriber CreateAsyncSubscriber(Action <ISubscriberConfigurator> configure = null)
        {
            SubscriberConfigurator configurator = _createSubscriberConfigurator(configure);

            IModel model = _connection.CreateModel();

            string queue = CreateQueue(model, configurator);

            IMessageConsumer consumer = CreateConsumer(model, configurator);

            var helper = CreateSubscriptionHelper(consumer, model, queue, configurator);

            return(new AsyncSubscriber(model, queue, consumer, helper, configurator));
        }
예제 #10
0
        public ISubscription CreateMonitor(Action <RawBusMessage> monitor)
        {
            SubscriberConfigurator configurator = _createSubscriberConfigurator(null);

            IModel model = _connection.CreateModel();

            string queue = CreateQueue(model, configurator);

            model.QueueBind(queue, configurator.Exchange, configurator.RoutingKey);

            var consumer = new MessageMonitorConsumer(_messageHelper, monitor);

            return(new MessageMonitor(model, queue, consumer, configurator));
        }
예제 #11
0
        public ISubscription RegisterSubscription <T>(T instance, Action <ISubscriberConfigurator> configure = null)
        {
            SubscriberConfigurator configurator = _createSubscriberConfigurator(configure);

            IModel model = _connection.CreateModel();

            string queue = CreateQueue(model, configurator);

            IMessageConsumer consumer = CreateConsumer(model, configurator);

            ISubscriptionHelper helper = CreateSubscriptionHelper(consumer, model, queue, configurator);

            return(new Subscription(model, queue, consumer, instance, configurator, helper));
        }
예제 #12
0
        public ISubscription CreateMonitor(Action <SerializedBusMessage> monitor, Action <ISubscriberConfigurator> configure = null, IEnumerable <BusHeader> filterHeaders = null)
        {
            SubscriberConfigurator configurator = _createSubscriberConfigurator(configure);

            IModel model = _connection.CreateModel();

            string queue = CreateQueue(model, configurator);

            model.QueueBind(queue, configurator.Exchange, configurator.RoutingKey, filterHeaders ?? Enumerable.Empty <BusHeader>());

            DefaultBasicConsumer consumer;

            if (configurator.TransactionalDelivery)
            {
                consumer = new TransactionalMessageMonitorConsumer(model, _messageHelper, monitor, configurator.ExceptionFilter);
            }
            else
            {
                consumer = new MessageMonitorConsumer(model, _messageHelper, monitor, configurator.ErrorSubscriber);
            }

            return(new MessageMonitor(model, queue, consumer, configurator));
        }
예제 #13
0
 public Subscription(IModel model, string queue, IMessageConsumer consumer, object instance, SubscriberConfigurator configurator, ISubscriptionHelper helper)
     : base(model, queue, consumer, configurator)
 {
     helper.RegisterSubscription(instance);
 }
예제 #14
0
 internal abstract IInputChannel OnCreateInputChannel(SubscriberConfigurator configurator);
예제 #15
0
        private static ISubscriptionHelper CreateSubscriptionHelper(IMessageConsumer consumer, IModel model, string queue, SubscriberConfigurator configurator)
        {
            ISubscriptionHelper helper = new SubscriptionHelper((type, filterInfo, handler) =>
            {
                if (consumer.Register(type, filterInfo, handler))
                {
                    model.QueueBind(queue, configurator.Exchange, configurator.RoutingKey, filterInfo);

                    return(true);
                }

                return(false);
            });

            return(helper);
        }
예제 #16
0
 public Subscriber(IModel model, string queue, IMessageConsumer consumer, ISubscriptionHelper helper, SubscriberConfigurator configurator)
     : base(model, queue, consumer, configurator)
 {
     _helper = helper;
 }
예제 #17
0
        public RabbitMQBus(Action <IBusConfigurator> busConfigurator = null)
        {
            BusConfigurator busConfiguration = new BusConfigurator();

            if (busConfigurator != null)
            {
                busConfigurator(busConfiguration);
            }

            BusId = busConfiguration.BusId;

            _exchange = "amq.headers";

            string username = "******";
            string password = "******";

            if (!string.IsNullOrEmpty(busConfiguration.ConnectionString.Endpoint))
            {
                _exchange = busConfiguration.ConnectionString.Endpoint;
            }

            if (!string.IsNullOrEmpty(busConfiguration.ConnectionString.Username))
            {
                username = busConfiguration.ConnectionString.Username;
            }

            if (!string.IsNullOrEmpty(busConfiguration.ConnectionString.Password))
            {
                password = busConfiguration.ConnectionString.Password;
            }

            ConnectionFactory factory = new ConnectionFactory
            {
                HostName = busConfiguration.ConnectionString.Host,
                Port     = busConfiguration.ConnectionString.Port,
                AutomaticRecoveryEnabled = true,
                TopologyRecoveryEnabled  = true,
                UserName    = username,
                Password    = password,
                VirtualHost = busConfiguration.ConnectionString.VirtualHost
            };

            _connection = factory.CreateConnection();

            _createSubscriberConfigurator = configure =>
            {
                SubscriberConfigurator configurator = new SubscriberConfigurator(_exchange, busConfiguration.ErrorSubscriber, busConfiguration.ReceiveSelfPublish);

                if (configure != null)
                {
                    configure(configurator);
                }

                return(configurator);
            };

            _createPublisherConfigurator = configure =>
            {
                PublisherConfigurator configurator = new PublisherConfigurator(_exchange, busConfiguration.ErrorHandler);

                if (configure != null)
                {
                    configure(configurator);
                }

                return(configurator);
            };
        }
예제 #18
0
 public MessageMonitor(IModel model, string queue, IBasicConsumer consumer, SubscriberConfigurator configurator) : base(model, queue, consumer, configurator)
 {
 }
예제 #19
0
        public RabbitMQBus(Action <IBusConfigurator> busConfigurator = null)
        {
            BusConfigurator busConfiguration = new BusConfigurator();

            if (busConfigurator != null)
            {
                busConfigurator(busConfiguration);
            }

            BusId             = busConfiguration.BusId;
            BusConnectionName = busConfiguration.ConnectionProvidedName;

            _exchange = "amq.headers";

            string username = "******";
            string password = "******";

            if (!string.IsNullOrEmpty(busConfiguration.ConnectionString.Endpoint))
            {
                _exchange = busConfiguration.ConnectionString.Endpoint;
            }

            if (!string.IsNullOrEmpty(busConfiguration.ConnectionString.Username))
            {
                username = busConfiguration.ConnectionString.Username;
            }

            if (!string.IsNullOrEmpty(busConfiguration.ConnectionString.Password))
            {
                password = busConfiguration.ConnectionString.Password;
            }

            ConnectionFactory factory = new ConnectionFactory
            {
                HostName = busConfiguration.ConnectionString.Host,
                Port     = busConfiguration.ConnectionString.Port,
                AutomaticRecoveryEnabled = true,
                TopologyRecoveryEnabled  = true,
                UserName               = username,
                Password               = password,
                VirtualHost            = busConfiguration.ConnectionString.VirtualHost,
                DispatchConsumersAsync = true
            };

            _connection = factory.CreateConnection(busConfiguration.ConnectionProvidedName);

            _connection.ConnectionBlocked += (sender, args) =>
            {
                busConfiguration.ConnectionBlocked(args.Reason);
            };

            _connection.ConnectionUnblocked += (sender, args) =>
            {
                busConfiguration.ConnectionUnblocked();
            };

            _createSubscriberConfigurator = configure =>
            {
                SubscriberConfigurator configurator = new SubscriberConfigurator(_exchange, busConfiguration.ReplyExchange, busConfiguration.ErrorSubscriber, busConfiguration.ReceiveSelfPublish, busConfiguration.Trace, () => busConfiguration.Blocked);

                if (configure != null)
                {
                    configure(configurator);
                }

                return(configurator);
            };

            _createPublisherConfigurator = configure =>
            {
                PublisherConfigurator configurator = new PublisherConfigurator(_exchange, busConfiguration.ErrorHandler, busConfiguration.Trace, () => busConfiguration.Blocked);

                if (configure != null)
                {
                    configure(configurator);
                }

                return(configurator);
            };

            _createRpcPublisherConfigurator = configure =>
            {
                RpcPublisherConfigurator configurator = new RpcPublisherConfigurator(_exchange, busConfiguration.UseFastReply, busConfiguration.ReplyExchange, busConfiguration.ErrorHandler, busConfiguration.Trace, () => busConfiguration.Blocked);

                if (configure != null)
                {
                    configure(configurator);
                }

                return(configurator);
            };
        }
예제 #20
0
        public Receiver(IModel model, string busId, string queue, IMessageHelper messageHelper, SubscriberConfigurator configurator)
        {
            _model = model;
            _busId = busId;

            _queue              = queue;
            _messageHelper      = messageHelper;
            _serializers        = configurator.Serializers;
            _errorSubscriber    = configurator.ErrorSubscriber;
            _receiveSelfPublish = configurator.ReceiveSelfPublish;

            _helper = new SubscriptionHelper((type, filterInfo, handler) =>
            {
                if (_nameMappings.TryAdd(type, filterInfo))
                {
                    _model.QueueBind(_queue, configurator.Exchange, configurator.RoutingKey, filterInfo);

                    return(true);
                }

                return(false);
            });
        }
예제 #21
0
 public Subscription(IModel model, string queue, IMessageConsumer consumer, object instance, SubscriberConfigurator configurator, ISubscriptionHelper helper)
     : base(model, queue, consumer, configurator)
 {
     helper.RegisterSubscription(instance);
 }
예제 #22
0
 public MessageMonitor(IModel model, string queue, IBasicConsumer consumer, SubscriberConfigurator configurator)
     : base(model, queue, consumer, configurator)
 {
 }