Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
 /// <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));
 }
Пример #5
0
        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;
        }
Пример #6
0
        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;
        }
Пример #7
0
        /// <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);
            }
        }