コード例 #1
0
        public RemotingResponse HandleRequest(IRequestHandlerContext context, RemotingRequest remotingRequest)
        {
            var request        = _binarySerializer.Deserialize <QueryConsumerRequest>(remotingRequest.Body);
            var consumerGroup  = _consumerManager.GetConsumerGroup(request.GroupName);
            var consumerIdList = new List <string>();

            if (consumerGroup != null)
            {
                consumerIdList = consumerGroup.GetConsumerIdsForTopic(request.Topic).ToList();
                consumerIdList.Sort();
            }
            return(RemotingResponseFactory.CreateResponse(remotingRequest, Encoding.UTF8.GetBytes(string.Join(",", consumerIdList))));
        }
コード例 #2
0
        public RemotingResponse HandleRequest(IRequestHandlerContext context, RemotingRequest remotingRequest)
        {
            var request        = _binarySerializer.Deserialize <QueryConsumerRequest>(remotingRequest.Body);
            var consumerGroup  = _consumerManager.GetConsumerGroup(request.GroupName);
            var consumerIdList = new List <string>();

            if (consumerGroup != null)
            {
                consumerIdList = consumerGroup.GetConsumerIdsForTopic(request.Topic).ToList();
                consumerIdList.Sort();
            }
            var consumerIds = string.Join(",", consumerIdList);
            var data        = Encoding.UTF8.GetBytes(consumerIds);

            return(new RemotingResponse((int)ResponseCode.Success, remotingRequest.Sequence, data));
        }
コード例 #3
0
        public RemotingResponse HandleRequest(IRequestHandlerContext context, RemotingRequest remotingRequest)
        {
            var request = _binarySerializer.Deserialize <QueryTopicConsumeInfoRequest>(remotingRequest.Body);
            var topicConsumeInfoList = _offsetManager.QueryTopicConsumeInfos(request.GroupName, request.Topic).ToList().Where(x => _queueService.IsQueueExist(x.Topic, x.QueueId)).ToList();

            topicConsumeInfoList.Sort((x, y) =>
            {
                var result = string.Compare(x.ConsumerGroup, y.ConsumerGroup);
                if (result != 0)
                {
                    return(result);
                }
                result = string.Compare(x.Topic, y.Topic);
                if (result != 0)
                {
                    return(result);
                }
                if (x.QueueId > y.QueueId)
                {
                    return(1);
                }
                else if (x.QueueId < y.QueueId)
                {
                    return(-1);
                }
                return(0);
            });

            foreach (var topicConsumeInfo in topicConsumeInfoList)
            {
                var consumerGroup = _consumerManager.GetConsumerGroup(topicConsumeInfo.ConsumerGroup);
                topicConsumeInfo.HasConsumer = consumerGroup != null && consumerGroup.GetAllConsumerIds().Count() > 0;
                var queueCurrentOffset = _queueService.GetQueueCurrentOffset(topicConsumeInfo.Topic, topicConsumeInfo.QueueId);
                topicConsumeInfo.QueueMaxOffset         = queueCurrentOffset;
                topicConsumeInfo.UnConsumedMessageCount = topicConsumeInfo.QueueMaxOffset - topicConsumeInfo.ConsumedOffset;
            }

            var data = _binarySerializer.Serialize(topicConsumeInfoList);

            return(new RemotingResponse((int)ResponseCode.Success, remotingRequest.Sequence, data));
        }
コード例 #4
0
        public RemotingResponse HandleRequest(IRequestHandlerContext context, RemotingRequest remotingRequest)
        {
            if (BrokerController.Instance.IsCleaning)
            {
                throw new BrokerCleanningException();
            }

            var request = _binarySerializer.Deserialize <DeleteConsumerGroupRequest>(remotingRequest.Body);

            if (string.IsNullOrEmpty(request.GroupName))
            {
                throw new ArgumentException("DeleteConsumerGroupRequest.GroupName cannot be null or empty.");
            }
            var consumerGroup = _consumerManager.GetConsumerGroup(request.GroupName);

            if (consumerGroup != null && consumerGroup.GetConsumerCount() > 0)
            {
                throw new Exception("Consumer group has consumer exist, not allowed to delete.");
            }

            var success = _offsetStore.DeleteConsumerGroup(request.GroupName);

            return(RemotingResponseFactory.CreateResponse(remotingRequest, Encoding.UTF8.GetBytes(success ? "1" : "0")));
        }
コード例 #5
0
        private bool IsPullRequestValid(PullRequest pullRequest)
        {
            var consumerGroup = _consumerManager.GetConsumerGroup(pullRequest.PullMessageRequest.ConsumerGroup);

            return(consumerGroup != null && consumerGroup.IsConsumerActive(pullRequest.RequestHandlerContext.Connection.RemotingEndPoint.ToString()));
        }