RethinkDb Тайм-аут соединений Java - PullRequest
0 голосов
/ 30 ноября 2018

У меня около 20 потоков Java, которые каждые 5 секунд открывают соединение на одном и том же БД и выполняют чтение и запись в транзакции на одной и той же таблице.Каждый час я получаю около 4/5 ошибок: com.rethinkdb.gen.exc.ReqlDriverError: Время ожидания соединения истекло.

public void myFunction(Object asset) {

    Connection connection = null;

    try {
        connection = r.connection().hostname(rethinkUrl).port(rethinkPort).timeout(rethinkTimeout)
                .user(rethinkUser, rethinkPassword).connect();

        // some operations 

        T assetOld = (T) gson.fromJson(r.db(getT().getDb()).table(getT().getTable()).get(asset.getId()).toJson()
                .run(connection).toString(), getT().getClass());

        /*
         * RethinkDB write operations will only throw exceptions if errors occur before
         * any writes. Other errors will be listed in first_error, and errors will be
         * set to a non-zero count. To properly handle errors with this term, code must
         * both handle exceptions and check the errors return value!
         */

        String jsonRes = r.db(getT().getDb()).table(getT().getTable())
                .insert(r.hashMap(QueryUtils.ID_FIELD, asset.getId())
                        .with(QueryUtils.LAST_TIMESTAMP_FIELD, asset.getLastTimestamp())
                        .with(QueryUtils.MANUFACTURER_FIELD, getT().getManufacturer())
                        .with(QueryUtils.MODEL_FIELD, getT().getModelName())
                        .with(QueryUtils.TC_FIELD, asset.getTC()).with(QueryUtils.SIGNALS_FIELD,
                                assetOld != null ? union(assetOld.getSignals(), asset.getSignals())
                                        : asset.getSignals()))
                .optArg("conflict", "update").toJson().run(connection);

        QueryResult queryRes = gson.fromJson(jsonRes, QueryResult.class);

        if (queryRes.getErrors() > 0) {
            String firstError = queryRes.getFirst_error();
            throw new RethinkException(firstError);
        }

    } catch (Exception e) {
        logger.error(e.getMessage(), e);

    } finally {
        if (connection != null) {
            connection.close();
        }
    }

}

Существует ли максимальное количество соглашений, разрешенных rethinkdb?Есть ли у вас какие-либо лучшие практики, чтобы предложить?

...