예제 #1
0
        public Task <string> BasicConsume(ConsumeMode mode, IQueueConsumer consumer,
                                          string queue, string consumerTag, bool withoutAcks, bool exclusive,
                                          IDictionary <string, object> arguments, bool waitConfirmation)
        {
            EnsureOpen();

            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            if (!waitConfirmation && string.IsNullOrEmpty(consumerTag))
            {
                throw new ArgumentException("You must specify a consumer tag if waitConfirmation = false");
            }

            if (!string.IsNullOrEmpty(consumerTag))
            {
                RegisterConsumer(mode, consumer, consumerTag);
            }

            return(_io.__BasicConsume(mode, queue, consumerTag, withoutAcks, exclusive, arguments, waitConfirmation,
                                      consumerTag2 =>
            {
                RegisterConsumer(mode, consumer, consumerTag2);
            }));
        }
예제 #2
0
        public Task <string> BasicConsume(ConsumeMode mode, IQueueConsumer consumer,
                                          string queue, string consumerTag, bool withoutAcks, bool exclusive,
                                          IDictionary <string, object> arguments, bool waitConfirmation)
        {
            EnsureOpen();

            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            if (!waitConfirmation && string.IsNullOrEmpty(consumerTag))
            {
                throw new ArgumentException("You must specify a consumer tag if waitConfirmation = false");
            }

            // TODO: refactor

            if (!string.IsNullOrEmpty(consumerTag))
            {
                var added = _consumerSubscriptions.TryAdd(consumerTag, new BasicConsumerSubscriptionInfo
                {
                    ConsumerTag = consumerTag,
                    Mode        = mode,
                    _consumer   = consumer
                });

                if (!added)
                {
                    throw new Exception("Consumer already exists for tag " + consumerTag);
                }
            }

            return(_io.__BasicConsume(mode, queue, consumerTag, withoutAcks, exclusive, arguments, waitConfirmation,
                                      consumerTag2 =>
            {
                var added = _consumerSubscriptions.TryAdd(consumerTag2, new BasicConsumerSubscriptionInfo
                {
                    ConsumerTag = consumerTag,
                    Mode = mode,
                    _consumer = consumer
                });

                if (!added)
                {
                    throw new Exception("Consumer already exists for tag " + consumerTag);
                }
            }));
        }