Example #1
0
 public void Init()
 {
     this.queueList = new List <QueueInfo>();
     if (originQueueList?.Count > 0)
     {
         foreach (var q in originQueueList)
         {
             this.queueList.Add(BuildQueueInfo(q));
         }
     }
     else if (!string.IsNullOrEmpty(queue))
     {
         if (queueCount == 1)
         {
             queueList.Add(BuildQueueInfo(queue));
         }
         else
         {
             for (int i = 0; i < QueueCount; i++)
             {
                 queueList.Add(BuildQueueInfo(queue + "_" + i));
             }
         }
     }
     //申明exchange
     RabbitMQClient.ExchangeDeclare(this.exchange).Wait();
 }
Example #2
0
 public void Init()
 {
     for (int i = 0; i < QueueCount; i++)
     {
         nodeList.Add(Queue + "_" + i);
     }
     _CHash = new ConsistentHash(nodeList, QueueCount * 10);
     //申明exchange
     RabbitMQClient.ExchangeDeclare(this.Exchange).Wait();
 }
Example #3
0
        public async Task Start(List <ConsumerInfo> consumerList)
        {
            if (consumerList != null)
            {
                var channel = await RabbitMQClient.PullModel();

                for (int i = 0; i < consumerList.Count; i++)
                {
                    var consumer = consumerList[i];
                    consumer.Channel = channel;
                    channel.Model.ExchangeDeclare(consumer.Exchange, "direct", true);
                    channel.Model.QueueDeclare(consumer.Queue, true, false, false, null);
                    channel.Model.QueueBind(consumer.Queue, consumer.Exchange, consumer.RoutingKey);
                    consumer.BasicConsumer           = new EventingBasicConsumer(consumer.Channel.Model);
                    consumer.BasicConsumer.Received += (ch, ea) =>
                    {
                        try
                        {
                            consumer.Handler.Notice(ea.Body).ContinueWith(t =>
                            {
                                if (t.Exception == null && !t.IsCanceled)
                                {
                                    consumer.Channel.Model.BasicAck(ea.DeliveryTag, false);
                                }
                                else if (t.Exception != null)
                                {
                                    throw t.Exception;
                                }
                                else if (t.IsCanceled)
                                {
                                    throw new Exception("Message processing timeout");
                                }
                            }).GetAwaiter().GetResult();
                        }
                        catch (Exception exception)
                        {
                            //需要记录错误日志
                            var e = exception.InnerException ?? exception;
                            logger.LogError(e, $"An error occurred in {consumer.Exchange}-{consumer.Queue}");
                            ReStart(consumer);//重启队列
                        }
                    };
                    consumer.BasicConsumer.ConsumerTag = consumer.Channel.Model.BasicConsume(consumer.Queue, false, consumer.BasicConsumer);
                    if (i % 4 == 0 && i != 0)
                    {
                        channel = await RabbitMQClient.PullModel();
                    }
                    if (!ConsumerAllList.Contains(consumer))
                    {
                        ConsumerAllList.Add(consumer);
                    }
                }
            }
        }
Example #4
0
 public MQServiceContainer(IServiceProvider svProvider)
 {
     this.serviceProvider = svProvider;
     RabbitMQClient.Init(svProvider);
 }
Example #5
0
 public void Dispose()
 {
     RabbitMQClient.PushModel(this);
 }
Example #6
0
 public static void InitRabbitMq(this IServiceProvider provider)
 {
     RabbitMQClient.Init(provider);
 }
Example #7
0
 public RabbitSubManager(ILogger <RabbitSubManager> logger, IServiceProvider provider)
 {
     this.logger   = logger;
     this.provider = provider;
     RabbitMQClient.Init(provider);
 }
Example #8
0
 public MQServiceContainer(IOptions <RabbitConfig> config)
 {
     RabbitMQClient.Init(config);
 }
Example #9
0
 public static Task PublishByCmd <T>(this RabbitPubAttribute rabbitMQInfo, UInt16 cmd, T data, string key)
 {
     return(RabbitMQClient.PublishByCmd <T>(cmd, data, rabbitMQInfo.Exchange, rabbitMQInfo.GetQueue(key)));
 }
Example #10
0
 public RabbitSubManager(ILogger <RabbitSubManager> logger, IServiceProvider provider)
 {
     this.logger   = logger;
     this.provider = provider;
     RabbitMQClient.Init(provider.GetService <IOptions <RabbitConfig> >());
 }