Как узнать, какая очередь выделена для какого потребителя-RocketMQ?

Потребительские очереди размещаются на стороне клиента, брокер ничего не знает об этом.

Так как же мы можем отслеживать, какая очередь выделена какому клиентскому клиенту?

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

На вкладке "Потребитель" нажмите кнопку "Сведения о потребителе", чтобы увидеть результат распределения очереди сообщений, как показано ниже: Результат распределения очередей сообщений

Другие вопросы по тегам