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 _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 } }; try { Model = connection.CreateModel(); var basicConsumer = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, Model); basicConsumers = new[] { basicConsumer }; Model.BasicQos(0, configuration.PrefetchCount, false); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments basicConsumer); // consumer logger.InfoFormat( "Declared consumer with consumerTag {consumerTag} on queue {queue} and configuration {configuration}", consumerTag, queue.Name, configuration ); return(StartConsumingStatus.Succeed); } catch (Exception exception) { logger.Error( exception, "Consume with consumerTag {consumerTag} from queue {queue} has failed", consumerTag, queue.Name ); return(StartConsumingStatus.Failed); } }
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); //// if configured, re-establish the consumer on a ConsumerCancelled event. //if (queue.IsConsumerRepairable) // ConsumerCancelled += (sender, args) => ConsumerReConnect(sender, consumerTag, configuration.IsExclusive, arguments,queue); 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); } }
/// <inheritdoc /> public StartConsumingStatus StartConsuming( IQueue queue, MessageHandler onMessage, ConsumerConfiguration configuration ) { Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); Preconditions.CheckNotNull(configuration, "configuration"); var consumerTag = conventions.ConsumerTagConvention(); try { InitModel(configuration.PrefetchCount, false); var basicConsumer = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, Model); basicConsumers = new[] { basicConsumer }; Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, configuration.Arguments, // arguments basicConsumer // consumer ); logger.InfoFormat( "Declared consumer with consumerTag {consumerTag} on queue {queue} and configuration {configuration}", consumerTag, queue.Name, configuration ); return(StartConsumingStatus.Succeed); } catch (Exception exception) { logger.Error( exception, "Consume with consumerTag {consumerTag} from queue {queue} has failed", consumerTag, queue.Name ); return(StartConsumingStatus.Failed); } }
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 } }; 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 basicConsumer = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, Model); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, arguments, // arguments basicConsumer // consumer ); basicConsumers.Add(basicConsumer); logger.InfoFormat( "Declared consumer with consumerTag {consumerTag} on queue={queue} and configuration {configuration}", queue.Name, consumerTag, configuration ); } catch (Exception exception) { logger.Error( exception, "Consume with consumerTag {consumerTag} on queue {queue} failed", queue.Name, consumerTag ); return(StartConsumingStatus.Failed); } } return(StartConsumingStatus.Succeed); } catch (Exception exception) { logger.Error( exception, "Consume on queue {queue} failed", string.Join(";", queueConsumerPairs.Select(x => x.Item1.Name)) ); return(StartConsumingStatus.Failed); } }
/// <inheritdoc /> public StartConsumingStatus StartConsuming( IReadOnlyCollection <Tuple <IQueue, MessageHandler> > queueConsumerPairs, ConsumerConfiguration configuration ) { Preconditions.CheckNotNull(queueConsumerPairs, nameof(queueConsumerPairs)); Preconditions.CheckNotNull(configuration, nameof(configuration)); try { InitModel(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 basicConsumer = new BasicConsumer(SingleBasicConsumerCancelled, consumerDispatcher, queue, eventBus, handlerRunner, onMessage, Model); Model.BasicConsume( queue.Name, // queue false, // noAck consumerTag, // consumerTag true, configuration.IsExclusive, configuration.Arguments, // arguments basicConsumer // consumer ); basicConsumers.Add(basicConsumer); logger.InfoFormat( "Declared consumer with consumerTag {consumerTag} on queue={queue} and configuration {configuration}", queue.Name, consumerTag, configuration ); } catch (Exception exception) { logger.Error( exception, "Consume with consumerTag {consumerTag} on queue {queue} failed", queue.Name, consumerTag ); return(StartConsumingStatus.Failed); } } return(StartConsumingStatus.Succeed); } catch (Exception exception) { logger.Error( exception, "Consume on queue {queue} failed", string.Join(";", queueConsumerPairs.Select(x => x.Item1.Name)) ); return(StartConsumingStatus.Failed); } }