public RabbitMqReceiveTransport(IRabbitMqHost host, ReceiveSettings settings, IManagementPipe managementPipe, ExchangeBindingSettings[] bindings, ISendEndpointProvider sendEndpointProvider, IPublishEndpointProvider publishEndpointProvider) { _host = host; _settings = settings; _bindings = bindings; _sendEndpointProvider = sendEndpointProvider; _publishEndpointProvider = publishEndpointProvider; _managementPipe = managementPipe; _receiveObservable = new ReceiveObservable(); _receiveTransportObservable = new ReceiveTransportObservable(); _inputAddress = _settings.GetInputAddress(_host.Settings.HostAddress); }
async Task IFilter <ModelContext> .Send(ModelContext context, IPipe <ModelContext> next) { if (IsFirstTime(context)) { await DeclareExchange(context).ConfigureAwait(false); if (_settings.BindToQueue) { await DeclareAndBindQueue(context).ConfigureAwait(false); } for (int i = 0; i < _exchangeBindings.Length; i++) { ExchangeBindingSettings binding = _exchangeBindings[i]; ExchangeSettings exchange = binding.Exchange; if (_log.IsDebugEnabled) { _log.DebugFormat("Exchange: {0} ({1})", exchange.ExchangeName, string.Join(", ", new[] { exchange.Durable ? "durable" : "", exchange.AutoDelete ? "auto-delete" : "" }.Where(x => !string.IsNullOrWhiteSpace(x)))); } await context.ExchangeDeclare(exchange.ExchangeName, exchange.ExchangeType, exchange.Durable, exchange.AutoDelete, exchange.Arguments).ConfigureAwait(false); await context.ExchangeBind(exchange.ExchangeName, _settings.ExchangeName, binding.RoutingKey, new Dictionary <string, object>()).ConfigureAwait(false); if (_log.IsDebugEnabled) { _log.DebugFormat("Exchange:Exchange Binding: {0} ({1})", exchange.ExchangeName, _settings.ExchangeName); } } } await next.Send(context).ConfigureAwait(false); }