RocketMq获取消费信息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010430495/article/details/83584363

        这几天项目需要查看mq的消费情况,阿里开源的mq-console界面挺好的,但是里面权限太大了,所以就琢磨着自己开发接口获取mq消费信息。话不多说,贴出代码

long timeout = 1000 * 3;
String topic = "market_test_topic";
String group = "group_name";
String nameAddr="mq的nameAddr";
//MQClientManager创建MQClientInstance,需要传入一个ClientConfig。
//因为DefaultMQProducer继承了ClientConfig,所以这里直接创建了DefaultMQProducer 
DefaultMQProducer producer = new DefaultMQProducer(group);
producer.setNamesrvAddr(nameAddr);
MQClientInstance mqClient = MQClientManager.getInstance().getAndCreateMQClientInstance(producer);
//这个start(),花费了我好长时间才意识到需要调用
mqClient.start();
//扣了rocketmq-tools的源码找到这个类
MQClientAPIImpl api = mqClient.getMQClientAPIImpl();
TopicRouteData routeData = api.getTopicRouteInfoFromNameServer(topic, timeout);
List<BrokerData> brokerDatas = routeData.getBrokerDatas();
List<MqBrokerConsumeInfo> consumeInfoList=new ArrayList<>();
long totalBrokerOff=0l,totalConsumerOff=0l,totalDiffOff=0l;
for (BrokerData brokerData : brokerDatas) {
    MqBrokerConsumeInfo consumeInfo=new MqBrokerConsumeInfo();
    String addr = brokerData.selectBrokerAddr();
    ConsumeStats consumeStats = api.getConsumeStats(addr, group, timeout);
    totalDiffOff+=consumeStats.computeTotalDiff();
    long brokerOffset=0l,consumerOffset=0l;
    Collection<OffsetWrapper> values = consumeStats.getOffsetTable().values();
    for(OffsetWrapper wrapper:values){
        brokerOffset+=wrapper.getBrokerOffset();
        totalBrokerOff+=wrapper.getBrokerOffset();
        consumerOffset+=wrapper.getConsumerOffset();
        totalConsumerOff+=wrapper.getConsumerOffset();
    }
    consumeInfo.setBroker(addr);
    consumeInfo.setDiffTotal(consumeStats.computeTotalDiff());
    consumeInfo.setBrokerOffset(brokerOffset);
    consumeInfo.setConsumerOffset(consumerOffset);
    consumeInfoList.add(consumeInfo);
}
MqConsumeInfo consumeInfo=new MqConsumeInfo();
consumeInfo.setTopic(topic);
consumeInfo.setGroup(group);
consumeInfo.setTotalBrokerOffset(totalBrokerOff);
consumeInfo.setTotalConsumerOffset(totalConsumerOff);
consumeInfo.setTotalDiffTotal(totalDiffOff);
consumeInfo.setBrokerConsumeInfoList(consumeInfoList);
System.out.println(JSON.toJSONString(consumeInfo));

猜你喜欢

转载自blog.csdn.net/u010430495/article/details/83584363