public StartConsumingStatus StartConsuming(IPersistentConnection connection, ICollection <Tuple <IQueue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> > > queueConsumerPairs, IConsumerConfiguration configuration) { Preconditions.CheckNotNull(connection, nameof(connection)); Preconditions.CheckNotNull(queueConsumerPairs, nameof(queueConsumerPairs)); Preconditions.CheckNotNull(configuration, nameof(configuration)); IDictionary <string, object> arguments = new Dictionary <string, object> { { "x-priority", configuration.Priority }, { "x-cancel-on-ha-failover", configuration.CancelOnHaFailover || connectionConfiguration.CancelOnHaFailover } }; try { Model = connection.CreateModel(); Model.BasicQos(0, configuration.PrefetchCount, true); basicConsumers = new List <BasicConsumer>(); foreach (var p in queueConsumerPairs) { var queue = p.Item1; var onMessage = p.Item2; var consumerTag = conventions.ConsumerTagConvention(); try { var basicConsumers = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, logger, Model); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments basicConsumers); // consumer this.basicConsumers.Add(basicConsumers); logger.InfoWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2} priority={3} x-cancel-on-ha-failover={4}", queue.Name, consumerTag, configuration.PrefetchCount, configuration.Priority, configuration.CancelOnHaFailover); } catch (Exception ex) { logger.ErrorWrite("Consume failed. queue='{0}', consumer tag='{1}', message='{2}'", queue.Name, consumerTag, ex.Message); return(StartConsumingStatus.Failed); } } } catch (Exception exception) { logger.ErrorWrite("Consume failed. queue='{0}', message='{1}'", string.Join(";", queueConsumerPairs.Select(x => x.Item1.Name)), exception.Message); return(StartConsumingStatus.Failed); } return(StartConsumingStatus.Succeed); }
public StartConsumingStatus StartConsuming( IPersistentConnection connection, IQueue queue, Func <byte[], MessageProperties, MessageReceivedInfo, Task> onMessage, IConsumerConfiguration configuration ) { Preconditions.CheckNotNull(connection, "connection"); Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); Preconditions.CheckNotNull(configuration, "configuration"); var consumerTag = conventions.ConsumerTagConvention(); IDictionary <string, object> arguments = new Dictionary <string, object> { { "x-priority", configuration.Priority }, { "x-cancel-on-ha-failover", configuration.CancelOnHaFailover || connectionConfiguration.CancelOnHaFailover } }; try { Model = connection.CreateModel(); var basicConsumers = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, logger, Model); this.basicConsumers = new[] { new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, logger, Model) }; Model.BasicQos(0, configuration.PrefetchCount, false); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments basicConsumers); // consumer logger.InfoWrite("Declared Consumer. queue='{0}', consumer tag='{1}' prefetchcount={2} priority={3} x-cancel-on-ha-failover={4}", queue.Name, consumerTag, configuration.PrefetchCount, configuration.Priority, configuration.CancelOnHaFailover); } catch (Exception exception) { logger.ErrorWrite("Consume failed. queue='{0}', consumer tag='{1}', message='{2}'", queue.Name, consumerTag, exception.Message); return(StartConsumingStatus.Failed); } return(StartConsumingStatus.Succeed); }
private void SingleBasicConsumerCancelled(BasicConsumer consumer) { if (cancelledConsumer == null) { cancelledConsumer = new HashSet <BasicConsumer>(); } cancelledConsumer.Add(consumer); if (cancelledConsumer.Count == basicConsumers.Count()) { cancelledConsumer = null; Cancelled?.Invoke(this); } }