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); } } }
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); } }
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); }
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"); } }
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); } } } }