コード例 #1
0
        public RemotingResponse HandleRequest(IRequestHandlerContext context, RemotingRequest remotingRequest)
        {
            var request            = _binarySerializer.Deserialize <QueryTopicQueueInfoRequest>(remotingRequest.Body);
            var topicQueueInfoList = new List <TopicQueueInfo>();
            var topicList          = !string.IsNullOrEmpty(request.Topic) ? new List <string> {
                request.Topic
            } : _queueService.GetAllTopics().ToList();

            foreach (var topic in topicList)
            {
                var queues = _queueService.QueryQueues(topic).ToList();
                foreach (var queue in queues)
                {
                    var topicQueueInfo = new TopicQueueInfo();
                    topicQueueInfo.Topic                  = queue.Topic;
                    topicQueueInfo.QueueId                = queue.QueueId;
                    topicQueueInfo.QueueCurrentOffset     = queue.CurrentOffset;
                    topicQueueInfo.QueueMinOffset         = queue.GetMinQueueOffset();
                    topicQueueInfo.QueueMessageCount      = queue.GetMessageRealCount();
                    topicQueueInfo.QueueMaxConsumedOffset = _offsetManager.GetMinOffset(queue.Topic, queue.QueueId);
                    topicQueueInfo.Status                 = queue.Status;
                    topicQueueInfoList.Add(topicQueueInfo);
                }
            }

            var data = _binarySerializer.Serialize(topicQueueInfoList);

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

            var request            = _binarySerializer.Deserialize <QueryTopicQueueInfoRequest>(remotingRequest.Body);
            var topicQueueInfoList = new List <TopicQueueInfo>();
            var queues             = _queueStore.QueryQueues(request.Topic).ToList().OrderBy(x => x.Topic).ThenBy(x => x.QueueId);

            foreach (var queue in queues)
            {
                var topicQueueInfo = new TopicQueueInfo();
                topicQueueInfo.Topic                  = queue.Topic;
                topicQueueInfo.QueueId                = queue.QueueId;
                topicQueueInfo.QueueCurrentOffset     = queue.NextOffset - 1;
                topicQueueInfo.QueueMinOffset         = queue.GetMinQueueOffset();
                topicQueueInfo.QueueMinConsumedOffset = _offsetStore.GetMinConsumedOffset(queue.Topic, queue.QueueId);
                topicQueueInfo.ProducerVisible        = queue.Setting.ProducerVisible;
                topicQueueInfo.ConsumerVisible        = queue.Setting.ConsumerVisible;
                topicQueueInfoList.Add(topicQueueInfo);
            }

            return(RemotingResponseFactory.CreateResponse(remotingRequest, _binarySerializer.Serialize(topicQueueInfoList)));
        }