private void UpdatePullRequestDict(string topic, IList <MessageQueue> messageQueues) { // Check message queues to remove var toRemovePullRequestKeys = new List <string>(); foreach (var pullRequest in _pullRequestDict.Values.Where(x => x.MessageQueue.Topic == topic)) { var key = pullRequest.MessageQueue.ToString(); if (!messageQueues.Any(x => x.ToString() == key)) { toRemovePullRequestKeys.Add(key); } } foreach (var pullRequestKey in toRemovePullRequestKeys) { PullRequest pullRequest; if (_pullRequestDict.TryRemove(pullRequestKey, out pullRequest)) { pullRequest.Stop(); PersistOffset(pullRequest); _logger.DebugFormat("Removed pull request, consumerId:{0}, group:{1}, topic={2}, queueId={3}", Id, GroupName, pullRequest.MessageQueue.Topic, pullRequest.MessageQueue.QueueId); } } // Check message queues to add. foreach (var messageQueue in messageQueues) { var key = messageQueue.ToString(); PullRequest pullRequest; if (!_pullRequestDict.TryGetValue(key, out pullRequest)) { var queueOffset = -1L; if (Setting.MessageModel == MessageModel.BroadCasting) { queueOffset = _localOffsetStore.GetQueueOffset(GroupName, messageQueue); } var request = new PullRequest(Id, GroupName, messageQueue, queueOffset, _remotingClient, Setting.MessageHandleMode, _messageHandler, Setting.PullRequestSetting); if (_pullRequestDict.TryAdd(key, request)) { request.Start(); _logger.DebugFormat("Added pull request, consumerId:{0}, group:{1}, topic={2}, queueId={3}", Id, GroupName, request.MessageQueue.Topic, request.MessageQueue.QueueId); } } } }
private void UpdatePullRequestDict(string topic, IList<MessageQueue> messageQueues) { // Check message queues to remove var toRemovePullRequestKeys = new List<string>(); foreach (var pullRequest in _pullRequestDict.Values.Where(x => x.MessageQueue.Topic == topic)) { var key = pullRequest.MessageQueue.ToString(); if (!messageQueues.Any(x => x.ToString() == key)) { toRemovePullRequestKeys.Add(key); } } foreach (var pullRequestKey in toRemovePullRequestKeys) { PullRequest pullRequest; if (_pullRequestDict.TryRemove(pullRequestKey, out pullRequest)) { pullRequest.Stop(); PersistRemovedMessageQueueOffset(pullRequest.MessageQueue); _logger.DebugFormat("[{0}]: removed pull request.[topic={1},queueId={2}]", Id, pullRequest.MessageQueue.Topic, pullRequest.MessageQueue.QueueId); } } // Check message queues to add. foreach (var messageQueue in messageQueues) { var key = messageQueue.ToString(); PullRequest pullRequest; if (!_pullRequestDict.TryGetValue(key, out pullRequest)) { var request = new PullRequest(Id, GroupName, messageQueue, _remotingClient, Setting.MessageHandleMode, _messageHandler, _offsetStore, Setting.PullRequestSetting); long nextOffset = ComputePullFromWhere(messageQueue); if (nextOffset >= 0) { request.NextOffset = nextOffset; if (_pullRequestDict.TryAdd(key, request)) { request.Start(); _logger.DebugFormat("[{0}]: added pull request.[topic={1},queueId={2}]", Id, request.MessageQueue.Topic, request.MessageQueue.QueueId); } } else { _logger.WarnFormat("[{0}]: the pull request {1} cannot be added as the nextOffset is < 0.", Id, request); } } } }
private void UpdatePullRequestDict(string topic, IList<MessageQueue> messageQueues) { // Check message queues to remove var toRemovePullRequestKeys = new List<string>(); foreach (var pullRequest in _pullRequestDict.Values.Where(x => x.MessageQueue.Topic == topic)) { var key = pullRequest.MessageQueue.ToString(); if (!messageQueues.Any(x => x.ToString() == key)) { toRemovePullRequestKeys.Add(key); } } foreach (var pullRequestKey in toRemovePullRequestKeys) { PullRequest pullRequest; if (_pullRequestDict.TryRemove(pullRequestKey, out pullRequest)) { pullRequest.Stop(); PersistOffset(pullRequest); _logger.DebugFormat("Removed pull request, consumerId:{0}, group:{1}, topic={2}, queueId={3}", Id, GroupName, pullRequest.MessageQueue.Topic, pullRequest.MessageQueue.QueueId); } } // Check message queues to add. foreach (var messageQueue in messageQueues) { var key = messageQueue.ToString(); PullRequest pullRequest; if (!_pullRequestDict.TryGetValue(key, out pullRequest)) { var queueOffset = -1L; if (Setting.MessageModel == MessageModel.BroadCasting) { queueOffset = _localOffsetStore.GetQueueOffset(GroupName, messageQueue); } var request = new PullRequest(Id, GroupName, messageQueue, queueOffset, _remotingClient, Setting.MessageHandleMode, _messageHandler, Setting.PullRequestSetting); if (_pullRequestDict.TryAdd(key, request)) { request.Start(); _logger.DebugFormat("Added pull request, consumerId:{0}, group:{1}, topic={2}, queueId={3}", Id, GroupName, request.MessageQueue.Topic, request.MessageQueue.QueueId); } } } }