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; } }
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); } }); } }
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); } }
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); }
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; } }