Настройка параметров пула соединений Mongodb через Java-драйвер mongo-java-driver - PullRequest
0 голосов
/ 09 ноября 2018

Используя Morphia и mongo-java-driver, я подключаюсь к серверу mongo:

MongoClientOptions.Builder builder = MongoClientOptions.builder();
        builder.sslEnabled(true);
        builder.sslInvalidHostNameAllowed(true);
        builder.maxConnectionIdleTime(0);
        MongoClientOptions sslOptions = builder.build();

        MongoClient mongoClient = new MongoClient(serverAddressList, Arrays.asList(mongoCredential), sslOptions);

Где serverAddressList - это хост : порт , список и mongoCredential с использованием аутентификации kerberos создаются как:

MongoCredential mongoCredential = MongoCredential.createGSSAPICredential("user@REALM.COM");

Я хочу настроить пользовательские параметры пула соединений, используя:

  1. MaxPoolSize
  2. minPoolSize
  3. maxIdleTimeMS и т. Д.

Для этого я нашел ConnectionPoolSettings.Builder и com.mongodb.connection.ConnectionPoolSettings Классы.

Я искал образец кода здесь :

ConnectionPoolSettings connectionPoolSettings = ConnectionPoolSettings
                .builder()
                .minSize(MIN_MONGO_POOL_SIZE)
                .maxSize(MONGO_POOL_SIZE)
                .build();
        MongoClientSettings settings = MongoClientSettings
                .builder()
                .readPreference(MONGO_READ_PREFERENCE)
                .credentialList(credentialsList).clusterSettings(clusterSettings)
                .connectionPoolSettings(connectionPoolSettings).build();

Может кто-нибудь предложить способ применения этих настроек для получения экземпляра MongoClient?

Библиотеки, которые используются:

dependencies {
    compile 'org.mongodb:mongodb-driver-sync:3.4.3'
  }

1 Ответ

0 голосов
/ 10 ноября 2018

Наконец-то выяснили правильный способ настройки параметров пула соединений, поэтому отвечу на мой собственный вопрос здесь.

Я просмотрел исходный код MongoClientOptions здесь где параметры connectionPool устанавливаются следующим образом:

connectionPoolSettings = ConnectionPoolSettings
                    .builder()
                    .minSize(getMinConnectionsPerHost())
                    .maxSize(getConnectionsPerHost())
                    .maxWaitQueueSize(getThreadsAllowedToBlockForConnectionMultiplier()
                    * getConnectionsPerHost())
                    .maxWaitTime(getMaxWaitTime(), MILLISECONDS)
                    .maxConnectionIdleTime(getMaxConnectionIdleTime(), MILLISECONDS)
                    .maxConnectionLifeTime(getMaxConnectionLifeTime(), MILLISECONDS)
                    .build();

Мы можем видеть, что значения minSize и maxSize выбираются из методов getMinConnectionsPerHost(); и getConnectionsPerHost();. Таким образом, чтобы изменить и настроить параметры пула соединений в клиентском коде, мы можем просто добавить значения maxConnectionIdleTime и minConnectionsPerHost в конструктор следующим образом:

MongoClientOptions.Builder builder = MongoClientOptions.builder();
    builder.maxConnectionIdleTime(0);
    builder.minConnectionsPerHost(50);
    builder.connectionsPerHost(200);
    MongoClientOptions sslOptions = builder.build();

Этот код успешно открывает минимальные указанные соединения с хостом сервера mongodb.

LOG : 00:20:00,714 INFO  [org.mongodb.driver.connection] (pool-1-thread-1) Opened connection [connectionId{localValue:50}] to server.com:27180
...