void InitializeLogicalQueue(string queueName, IModel model, bool asErrorQueue, bool autoDelete = false) { log.Info("Initializing logical queue '{0}'", queueName); var arguments = new Dictionary <string, object> { { "x-ha-policy", "all" } }; //< enable queue mirroring log.Debug("Declaring queue '{0}'", queueName); model.QueueDeclare(queueName, durable: true, arguments: arguments, autoDelete: autoDelete, exclusive: false); // Error queues do not need additional setup. // @mookid8000: for "Traditional" Rebus RabbitMQ usage, yes they do - otherwise, failed messages might be published using a topic to which there are no subscribers if (asErrorQueue && UsingOneExchangePerMessageTypeRouting) { return; } if (UsingOneExchangePerMessageTypeRouting) { log.Debug("Queue '{0}' is using one exchange-per-type routing.", queueName); if (InputQueueAddressIsExchange && ensureInputExchangeIsDeclared) { var exchangeName = InputQueueAddress.TrimStart('@'); log.Debug("Declaring (input) exchange '{0}'", InputQueueAddress); model.ExchangeDeclare(exchangeName, ExchangeType.Fanout, true); log.Debug("Binding queue '{0}' to exchange '{0}'", InputQueue, exchangeName); model.QueueBind(InputQueue, exchangeName, ""); } return; } if (ensureExchangeIsDeclared) { log.Debug("Declaring exchange '{0}'", ExchangeName); model.ExchangeDeclare(ExchangeName, ExchangeType.Topic, true); } if (bindDefaultTopicToInputQueue) { log.Debug("Binding topic '{0}' to queue '{1}'", queueName, queueName); model.QueueBind(queueName, ExchangeName, queueName); } }
void RemoveSubscription(IModel model, Type subscription) { var eventName = GetEventName(subscription); var exchange = UsingOneExchangePerMessageTypeRouting ? eventName : ExchangeName; var routingKey = UsingOneExchangePerMessageTypeRouting ? "" : eventName; var inputAddress = InputQueueAddress.TrimStart('@'); log.Info("Unsubscribing {0} from {1}", inputAddress, eventName); if (InputQueueAddressIsExchange) { model.ExchangeUnbind(inputAddress, exchange, routingKey); } else { model.QueueUnbind(inputAddress, exchange, routingKey, new Dictionary <string, object>()); } }
void EstablishSubscription(IModel model, Type subscription) { var eventName = GetEventName(subscription); var exchange = UsingOneExchangePerMessageTypeRouting ? eventName : ExchangeName; var routingKey = UsingOneExchangePerMessageTypeRouting ? "" : eventName; var inputAddress = InputQueueAddress.TrimStart('@'); if (UsingOneExchangePerMessageTypeRouting) { log.Debug("Declaring fanout exchange for: {0}", exchange); model.ExchangeDeclare(exchange, "fanout", true, false, null); } log.Info("Subscribing {0} to {1}", inputAddress, eventName); if (InputQueueAddressIsExchange) { model.ExchangeBind(inputAddress, exchange, routingKey); } else { model.QueueBind(inputAddress, exchange, routingKey); } }