rocketmq统计堆积消息数

<dependency>
	<groupId>org.apache.rocketmqgroupId>
	<artifactId>rocketmq-toolsartifactId>
	<version>4.8.0version>
	<exclusions>
		<exclusion>
			<groupId>ch.qos.logbackgroupId>
			<artifactId>logback-classicartifactId>
		exclusion>
	exclusions>
dependency>

获取指定消费者组指定主题下的堆积量

@Component
public class DataMonitorUtil {

    private static final Logger logger = LoggerFactory.getLogger(DataMonitorUtil.class);

    private static String path;

    private static DefaultMQAdminExt defaultMQAdminExt;

    @Value("${rocketmq.namesrvAddr}")
    private String namesrvAddr;

    @PostConstruct
    public void init() {
        //初始化监控客户端
        try {
            defaultMQAdminExt = new DefaultMQAdminExt();
            defaultMQAdminExt.setInstanceName(Long.toString(System.currentTimeMillis()));
            defaultMQAdminExt.setNamesrvAddr(namesrvAddr);
            defaultMQAdminExt.start();
        } catch (Exception e) {
            logger.error("监控客户端启动失败...", e);
        }

    }

    /**
     * 获取消息堆积量
     * @version 1.0
     * @author zhangpeng
     * @return long
     * @exception Exception
     *
     */
    public static long getDiffNum(String topicName, String consumerGroupName){
        long diffTotal = 0L;
        try{
            //当消费端未消费时,此方法会报错
            ConsumeStats consumeStats = defaultMQAdminExt.examineConsumeStats(consumerGroupName);
            List<MessageQueue> mqList = new LinkedList();
            mqList.addAll(consumeStats.getOffsetTable().keySet());
            Collections.sort(mqList);
            //遍历所有的队列,计算堆积量
            for (MessageQueue mq : mqList) {
                //只计算group下此生产端发送对应的Topic
                if(topicName.equals(mq.getTopic())){
                    OffsetWrapper offsetWrapper = (OffsetWrapper)consumeStats.getOffsetTable().get(mq);
                    long diff = offsetWrapper.getBrokerOffset() - offsetWrapper.getConsumerOffset();
                    diffTotal += diff;
                }
            }
        }catch(Exception e){
            logger.error("ConsumerGroupName {} is not exited !", consumerGroupName);
            logger.error(e.getMessage());
            //此中出现任何错误,均返回堆积量为0;
            diffTotal = 0L;

        }
        return diffTotal;
    }
}

你可能感兴趣的:(redis,数据库,缓存)