Как узнать, какой запрос Mongodb выполняется на каком узле? - PullRequest
1 голос
/ 25 сентября 2019

При подключении к кластеру репликации MongoDB я хочу знать, на каком узле выполняется запрос.

Я пытался использовать explain() в оболочке mongo, но драйвер Java, похоже, не поддерживает эту команду.

Как мне добиться этого, используя MongoDB Java Driver?

1 Ответ

2 голосов
/ 25 сентября 2019

Вы можете попробовать использовать Command Monitoring из драйвера MongoDB Java;

public class CustomCommandListener implements CommandListener {
    @Override
    public void commandStarted(final CommandStartedEvent event) {
        System.out.println(String.format("Sent command '%s:%s' with id %s to database" +
            " '%s' on connection '%s' to server '%s'",
            event.getCommandName(),
            event.getCommand().get(event.getCommandName()),
            event.getRequestId(),
            event.getDatabaseName(),
            event.getConnectionDescription().getConnectionId(),
            event.getConnectionDescription().getServerAddress()));
    }

    @Override
    public void commandSucceeded(CommandSucceededEvent event) {
        //ignore
    }

    @Override
    public void commandFailed(CommandFailedEvent event) {
        //ignore
    }
}

Существуют также CommandSucceededEvent и CommandFailedEvent, но независимо от результата вы можете получить некоторые детали с помощью CommandStartedEvent как указано выше.

Затем передайте этот пользовательский прослушиватель в настройки MongoClient;

ClusterSettings clusterSettings = ClusterSettings.builder().hosts(hostList).build();
MongoClientSettings settings = MongoClientSettings.builder()
    .addCommandListener(new CustomCommandListener())
    .clusterSettings(clusterSettings)
    // other settings
    .build();
MongoClient client = MongoClients.create(settings);

Подробнее о Документация драйвера MongoDB для Java

...