/// <inheritdoc /> public IConsumer CreateConsumer( IReadOnlyCollection <Tuple <IQueue, MessageHandler> > queueConsumerPairs, ConsumerConfiguration configuration ) { if (configuration.IsExclusive || queueConsumerPairs.Any(x => x.Item1.IsExclusive)) { throw new NotSupportedException("Exclusive multiple consuming is not supported."); } return(new PersistentMultipleConsumer(queueConsumerPairs, connection, configuration, internalConsumerFactory, eventBus)); }
/// <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); } }
/// <inheritdoc /> public IConsumer CreateConsumer( IQueue queue, MessageHandler onMessage, ConsumerConfiguration configuration ) { Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); Preconditions.CheckNotNull(connection, "connection"); var consumer = CreateConsumerInstance(queue, onMessage, configuration); consumers.Add(consumer); return(consumer); }
/// <summary> /// Create the correct implementation of IConsumer based on queue properties /// </summary> /// <param name="queue"></param> /// <param name="onMessage"></param> /// <param name="configuration"></param> /// <returns></returns> private IConsumer CreateConsumerInstance( IQueue queue, MessageHandler onMessage, ConsumerConfiguration configuration ) { if (queue.IsExclusive) { return(new TransientConsumer(queue, onMessage, configuration, internalConsumerFactory, eventBus)); } if (configuration.IsExclusive) { return(new ExclusiveConsumer(queue, onMessage, configuration, internalConsumerFactory, eventBus)); } return(new PersistentConsumer(queue, onMessage, configuration, internalConsumerFactory, eventBus)); }
public PersistentConsumer( IQueue queue, MessageHandler onMessage, ConsumerConfiguration configuration, IInternalConsumerFactory internalConsumerFactory, IEventBus eventBus ) { Preconditions.CheckNotNull(queue, "queue"); Preconditions.CheckNotNull(onMessage, "onMessage"); Preconditions.CheckNotNull(internalConsumerFactory, "internalConsumerFactory"); Preconditions.CheckNotNull(eventBus, "eventBus"); Preconditions.CheckNotNull(configuration, "configuration"); this.queue = queue; this.onMessage = onMessage; this.configuration = configuration; this.internalConsumerFactory = internalConsumerFactory; this.eventBus = eventBus; }
public PersistentMultipleConsumer( IReadOnlyCollection <Tuple <IQueue, MessageHandler> > queueConsumerPairs, IPersistentConnection connection, ConsumerConfiguration configuration, IInternalConsumerFactory internalConsumerFactory, IEventBus eventBus ) { Preconditions.CheckNotNull(queueConsumerPairs, nameof(queueConsumerPairs)); Preconditions.CheckNotNull(connection, nameof(connection)); Preconditions.CheckNotNull(internalConsumerFactory, nameof(internalConsumerFactory)); Preconditions.CheckNotNull(eventBus, nameof(eventBus)); Preconditions.CheckNotNull(configuration, nameof(configuration)); this.queueConsumerPairs = queueConsumerPairs; this.connection = connection; this.configuration = configuration; this.internalConsumerFactory = internalConsumerFactory; this.eventBus = eventBus; }
/// <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); } }