如何知道哪个队列分配给哪个消费者-RocketMQ?

时间:2017-02-08 10:06:50

标签: rocketmq

消费者队列在客户端分配,经纪人对此一无所知。

那么我们如何监控哪个队列分配给哪个客户端客户端?

1 个答案:

答案 0 :(得分:1)

虽然没有退出命令,但对于每个使用者组的每个消息队列,您可以使用提供的管理基础结构找到客户端。以下是实现此目的的片段:

private Map<MessageQueue, String> getClientConnection(DefaultMQAdminExt defaultMQAdminExt, String groupName){
    Map<MessageQueue, String> results = new HashMap<MessageQueue, String>();
    try{
        ConsumerConnection consumerConnection = defaultMQAdminExt.examineConsumerConnectionInfo(groupName);
        for (Connection connection : consumerConnection.getConnectionSet()){
            String clinetId = connection.getClientId();
            ConsumerRunningInfo consumerRunningInfo = defaultMQAdminExt.getConsumerRunningInfo(groupName, clinetId, false);
            for(MessageQueue messageQueue : consumerRunningInfo.getMqTable().keySet()){
                results.put(messageQueue, clinetId + " " + connection.getClientAddr());
            }
        }
    }catch (Exception e){

    }
    return results;
}

如果您尚未使用RocketMQ-Console项目,请尝试运行它:https://github.com/rocketmq/rocketmq-console-ng

在“消费者”选项卡中,单击“&#34;消费者详细信息&#34;按钮,您将看到消息队列分配结果,如下所示: Message queues allocation result