Beispiel #1
0
        /// <summary>
        /// Monitor consumer availability and expansion
        /// </summary>
        /// <returns></returns>
        public async Task MonitorConsumer()
        {
            foreach (var key in ConsumerPool.Keys)
            {
                IList <IRabbitConsumer> consumers = ConsumerPool[key];
                //Check if you need to expand
                //Check that more than half of the consumers vote to expand and expand
                if ((consumers.Count / 2) <= consumers.Where(f => f.IsExpand()).Count())
                {
                    IRabbitConsumer consumer = consumers.First();
                    if (consumers.Count < consumer.Options.MaxConsumerCount)
                    {
                        await this.Subscribe(consumer.Queue, consumer.Exchange);
                    }
                }

                //Check if the consumer is restarted
                for (int i = 0; i < consumers.Count; i++)
                {
                    IRabbitConsumer consumer = consumers[i];
                    if (await this.RestartConsumer(consumer))
                    {
                        //Remove old consumers
                        consumers.RemoveAt(i);
                        i--;
                    }
                }
            }
        }
 public RedditConsumer(
     IRabbitPublisher rabbitPublisher,
     IRabbitConsumer rabbitManager,
     IStockTickerManager stockTickerManager,
     IServiceConfigurations serviceConfigurations,
     ISentimentAnalysis sentimentAnalysis)
 {
     _rabbitPublisher       = rabbitPublisher;
     _rabbitConsumer        = rabbitManager;
     _stockTickerManager    = stockTickerManager;
     _serviceConfigurations = serviceConfigurations;
     _sentimentAnalysis     = sentimentAnalysis;
 }
Beispiel #3
0
        public async Task <bool> RestartConsumer(IRabbitConsumer consumer)
        {
            try
            {
                if (consumer.IsAvailable())
                {
                    await this.Subscribe(consumer.Queue, consumer.Exchange);

                    await consumer.Close();

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                this._logger.LogError(ex, $"Restart {consumer.Queue}&{consumer.Exchange}consumer failed");
                return(false);
            }
        }