Пример #1
0
        private void ListeningMq(RedisReliableQueue <string> redisReliableQueue)
        {
            while (true)
            {
                try
                {
                    var queue = redisReliableQueue;
                    var msg   = queue.TakeOne(1);
                    if (msg != null)
                    {
                        var message = JsonConvert.DeserializeObject <TransportMessage>(msg);

                        message.Headers.Add(Headers.Group, _queueName);

                        OnMessageReceived?.Invoke(message.GetId(), message);

                        // 确认消息
                        queue.Acknowledge(new[] { msg });
                    }
                    else
                    {
                        // 没事干,歇一会
                        System.Threading.Tasks.Task.Delay(1000);
                    }
                }
                catch (Exception ex)
                {
                    OnLog?.Invoke(this, new LogMessageEventArgs()
                    {
                        LogType = MqLogType.ExceptionReceived, Reason = $"{_queueName}-{redisReliableQueue.Key}-{ex.Message}"
                    });
                    //throw;
                }
            }
        }
Пример #2
0
        protected async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            await Task.Yield();

            // Redis 可信消息队列,支持消费确认
            _queue = _redis.GetReliableQueue <String>("rdsTopic");

            await _queue.ConsumeAsync <Area>(area =>
            {
                XTrace.WriteLine("RedisQueue.Consume {0} {1}", area.Code, area.Name);
            }, stoppingToken, _log);
        }
Пример #3
0
        static void AssignProducer()
        {
            var set = master.GetSet <string>("testList");

            if (ListContainer == null)
            {
                lock (_lock)
                {
                    if (ListContainer != null)
                    {
                        return;
                    }
                    foreach (var item in set)
                    {
                        if (master.Get <bool>(item))
                        {
                            ListContainer = master.GetReliableQueue <string>(item + "BQueue");
                        }
                    }
                }
            }
            else if (ListContainer.Count >= maxContainerNumber)
            {
                lock (_lock)
                {
                    if (ListContainer.Count < maxContainerNumber)
                    {
                        return;
                    }
                    foreach (var item in set)
                    {
                        if (item != ListContainer.Key.Replace("BQueue", ""))
                        {
                            master.Set(ListContainer.Key.Replace("BQueue", ""), false);
                            ListContainer = master.GetReliableQueue <string>(item + "BQueue");
                            master.Execute(item + "BQueue", client => client.Execute <string>("LTRIM", item + "BQueue", "1", "0"));
                            master.Set(item, true);
                            return;
                        }
                    }
                }
            }
        }
Пример #4
0
 static void AssignConsumer()
 {
     if (SlaveListContainer == null)
     {
         lock (_slavelock)
         {
             if (SlaveListContainer != null)
             {
                 return;
             }
             var set = slave1.GetSet <string>(ListKey);
             foreach (var item in set)
             {
                 if (slave1.Get <bool>(item))
                 {
                     currentKey         = item;
                     SlaveListContainer = slave1.GetReliableQueue <string>(item + "BQueue");
                     return;
                 }
             }
         }
     }
     else if (!slave1.Get <bool>(currentKey) && SlaveListContainer.Count == 0)
     {
         lock (_slavelock)
         {
             if (slave1.Get <bool>(currentKey))
             {
                 return;
             }
             var set = slave1.GetSet <string>(ListKey);
             foreach (var item in set)
             {
                 if (slave1.Get <bool>(item))
                 {
                     currentKey         = item;
                     SlaveListContainer = slave1.GetReliableQueue <string>(item + "BQueue");
                     return;
                 }
             }
         }
     }
 }