예제 #1
0
        public void SetupExchangeAndQueueFor <T>(ExchangeSetupData exchange, QueueSetupData queue)
        {
            var routeFinder  = _routeFinderFactory(_environment, exchange.ExchangeType);
            var queueName    = routeFinder.FindQueueName <T>(queue.SubscriptionName);
            var exchangeName = routeFinder.FindExchangeName <T>();
            var routingKey   = queue.RoutingKey ?? routeFinder.FindRoutingKey <T>();

            using (var connection = _connectionFactory.CreateConnection())
            {
                using (var model = connection.CreateModel())
                {
                    // Declare Exchange
                    DeclareExchange(exchange, model, exchangeName);
                }
                using (var model = connection.CreateModel())
                {
                    // Declare Queue
                    DeclareQueue <T>(queue, queueName, model);
                }
                using (var model = connection.CreateModel())
                {
                    // Bind Queue to Exchange
                    BindQueue <T>(model, queue, exchangeName, queueName, routingKey);
                }
            }
        }
예제 #2
0
 protected virtual void DeclareExchange(ExchangeSetupData exchange, IModel model, string exchangeName)
 {
     if (string.IsNullOrEmpty(exchangeName))
     {
         _watcher.WarnFormat("Attempt to declare a Exchange with empty string, that's the default built-in exchange so the action will be ignored");
         return;
     }
     try
     {
         model.ExchangeDeclare(exchangeName, exchange.ExchangeType, exchange.Durable, exchange.AutoDelete, null);
     }
     catch (OperationInterruptedException oie)
     {
         if (oie.ShutdownReason.ReplyText.StartsWith("PRECONDITION_FAILED - "))
         {
             _watcher.ErrorFormat(oie.ShutdownReason.ReplyText);
         }
         else
         {
             _watcher.Error(oie);
         }
     }
     catch (Exception ex)
     {
         _watcher.Error(ex);
     }
 }
예제 #3
0
        public void Should_set_Durable_true_and_ExchangeType_Direct_by_default()
        {
            // Arrange & Action
            var data = new ExchangeSetupData();

            // Asert
            Assert.IsTrue(data.Durable);
            Assert.AreEqual("direct", data.ExchangeType);
        }
예제 #4
0
 protected override void DeclareExchange(ExchangeSetupData exchange, IModel model, string exchangeName)
 {
     if (exchange != null && "headers".Equals(exchange.ExchangeType, StringComparison.InvariantCultureIgnoreCase))
     {
         base.DeclareExchange(exchange, model, exchangeName);
     }
     else
     {
         throw new InvalidExchangeTypeException("Expect exchange type headers");
     }
 }
 protected override void DeclareExchange(ExchangeSetupData exchange, RabbitMQ.Client.IModel model, string exchangeName)
 {
     if (exchange != null && exchange.ExchangeType == "headers")
     {
         base.DeclareExchange(exchange, model, exchangeName);
     }
     else
     {
         throw new Exception("Expect exchange type headers");
     }
 }
예제 #6
0
        public virtual void Destroy <T>(ExchangeSetupData exchange, QueueSetupData queue)
        {
            var conventions  = _routeFinderFactory(_environment, exchange.ExchangeType);
            var queueName    = conventions.FindQueueName <T>(queue.SubscriptionName);
            var exchangeName = conventions.FindExchangeName <T>();

            using (var connection = _connectionFactory.CreateConnection())
            {
                using (var model = connection.CreateModel())
                {
                    // Delete Queue
                    DeleteQueue <T>(model, queue, queueName);
                }

                using (var model = connection.CreateModel())
                {
                    // Delete Exchange
                    try
                    {
                        model.ExchangeDelete(exchangeName);
                    }
                    catch (OperationInterruptedException oie)
                    {
                        if (oie.ShutdownReason.ReplyText.StartsWith("NOT_FOUND - no exchange "))
                        {
                            _watcher.WarnFormat(oie.ShutdownReason.ReplyText);
                        }
                        else
                        {
                            _watcher.Error(oie);
                        }
                    }
                    catch (Exception ex)
                    {
                        _watcher.Error(ex);
                    }
                }
            }
        }