public Queue GetQueue(string topic, int queueId)
 {
     using (var connection = GetConnection())
     {
         var result = connection.QueryList(new
         {
             Topic = topic,
             QueueId = queueId
         }, _setting.QueueTable).SingleOrDefault();
         if (result != null)
         {
             var queue = new Queue(topic, queueId);
             var status = (int)result.Status;
             if (status == (int)QueueStatus.Normal)
             {
                 queue.Enable();
             }
             else if (status == (int)QueueStatus.Disabled)
             {
                 queue.Disable();
             }
             return queue;
         }
         return null;
     }
 }
示例#2
0
        static void WriteMessagePerfTest()
        {
            var threadCount = int.Parse(ConfigurationManager.AppSettings["concurrentThreadCount"]);                         //并行写消息的线程数
            var messageSize = int.Parse(ConfigurationManager.AppSettings["messageSize"]);                                   //消息大小,字节为单位
            var messageCount = int.Parse(ConfigurationManager.AppSettings["messageCount"]);                                 //总共要写入的消息数
            var payload = new byte[messageSize];
            var message = new Message("topic1", 100, payload);
            var queue = new Queue(message.Topic, 1);
            var count = 0L;

            _watch = Stopwatch.StartNew();
            StartPrintThroughputTask();

            for (var i = 0; i < threadCount; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    while (true)
                    {
                        var current = Interlocked.Increment(ref count);
                        if (current > messageCount)
                        {
                            break;
                        }
                        _messageStore.StoreMessageAsync(queue, message, (x, y) =>
                        {
                            Interlocked.Increment(ref _currentCount);
                        }, null);
                    }
                });
            }
        }
示例#3
0
 public void AddQueue(string topic)
 {
     Ensure.NotNullOrEmpty(topic, "topic");
     var queues = _queueDict.Values.Where(x => x.Topic == topic);
     if (queues.Count() == BrokerController.Instance.Setting.TopicMaxQueueCount)
     {
         throw new ArgumentException(string.Format("Queue count cannot bigger than {0}.", BrokerController.Instance.Setting.TopicMaxQueueCount));
     }
     var queueId = queues.Count() == 0 ? 0 : queues.Max(x => x.QueueId) + 1;
     var queue = new Queue(topic, queueId);
     _queueStore.CreateQueue(queue);
     var key = CreateQueueKey(queue.Topic, queue.QueueId);
     _queueDict.TryAdd(key, queue);
 }
 public void DeleteQueue(Queue queue)
 {
     using (var connection = GetConnection())
     {
         var count = connection.Delete(new
         {
             Topic = queue.Topic,
             QueueId = queue.QueueId
         }, _setting.QueueTable);
         if (count > 0)
         {
             _logger.InfoFormat("Delete queue success, topic={0}, queueId={1}", queue.Topic, queue.QueueId);
         }
     }
 }
 public void CreateQueue(Queue queue)
 {
     using (var connection = GetConnection())
     {
         var current = DateTime.Now;
         connection.Insert(new
         {
             Topic = queue.Topic,
             QueueId = queue.QueueId,
             Status = queue.Status,
             CreatedTime = current,
             UpdatedTime = current
         }, _setting.QueueTable);
         _logger.InfoFormat("Create queue success, topic={0}, queueId={1}", queue.Topic, queue.QueueId);
     }
 }
示例#6
0
 private void LoadQueue(string topic, int queueId)
 {
     var queue = new Queue(topic, queueId);
     queue.Load();
     if (queue.Setting.IsDeleted)
     {
         return;
     }
     var key = QueueKeyUtil.CreateQueueKey(topic, queueId);
     _queueDict.TryAdd(key, queue);
 }
示例#7
0
 private void BatchLoadQueueIndexToMemory(Queue queue, long startQueueOffset)
 {
     if (_messageStore.SupportBatchLoadQueueIndex)
     {
         var indexDict = _messageStore.BatchLoadQueueIndex(queue.Topic, queue.QueueId, startQueueOffset);
         foreach (var entry in indexDict)
         {
             queue.SetQueueIndex(entry.Key, entry.Value);
         }
     }
 }
 public void UpdateQueue(Queue queue)
 {
     using (var connection = GetConnection())
     {
         var count = connection.Update(new
         {
             Status = queue.Status,
             UpdatedTime = DateTime.Now
         }, new
         {
             Topic = queue.Topic,
             QueueId = queue.QueueId
         }, _setting.QueueTable);
         if (count > 0)
         {
             _logger.InfoFormat("Update queue success, topic={0}, queueId={1}, status={2}", queue.Topic, queue.QueueId, queue.Status);
         }
     }
 }
 public IEnumerable<Queue> LoadAllQueues()
 {
     _logger.Info("Start to load queues from db.");
     using (var connection = GetConnection())
     {
         var queues = new List<Queue>();
         var result = connection.QueryList(null, _setting.QueueTable);
         if (result != null)
         {
             foreach (var item in result)
             {
                 var topic = item.Topic as string;
                 var queueId = (int)item.QueueId;
                 var status = (int)item.Status;
                 var queue = new Queue(topic, queueId);
                 if (status == (int)QueueStatus.Normal)
                 {
                     queue.Enable();
                 }
                 else if (status == (int)QueueStatus.Disabled)
                 {
                     queue.Disable();
                 }
                 queues.Add(queue);
             }
         }
         _logger.InfoFormat("{0} queues loaded from db.", queues.Count);
         return queues;
     }
 }