Автоматический выключатель vertx больше никогда не закрывается

У меня проблема с моим CircleBreaker. Если я спам запросы к моему сервису, канал OPENи решить с ошибкой тайм-аута. После моего установленного таймаута цепь входит в HALF_OPEN состояние - все как и должно быть. Но отсюда схема больше никогда не замыкается. Каждый сделанный запрос приведет к ошибке и немедленно снова откроет цепь.

Я использую cb для связи между моими сервисами через vertx eventBus следующим образом:

return this.circuitBreaker.rxExecuteCommandWithFallback(
  future -> this.vertx.eventBus().rxSend("myEvent", myBody)
    .subscribe(
      data -> future.complete(data.body().toString()),
      err -> future.fail(err.getMessage())
    ), Throwable::getMessage);

мои опции CircleBreaker:

return new CircuitBreakerOptions()
  .setMaxFailures(10)
  .setTimeout(2000L)
  .setResetTimeout(5000L)
  .setMaxRetries(2)
  .setFallbackOnFailure(true);

Мой конфиг неверен? я могу использовать Rxified API неправильно?

изменить, если я запускаю свой код в Docker-контейнерах, я просто получаю сообщение об ошибке:io.vertx.core.impl.NoStackTraceThrowable: operation timeout

если я запускаю приложение локально, я вижу, что PG/SQL на самом деле бросает sorry, too many clients исключение. это, безусловно, объясняет, почему канал все еще открыт, но, так как я уже закрывал свой клиент в случае успеха и ошибки, я не совсем понимаю, почему это происходит.

-

похоже, что мой текущий способ закрытия соединений после запроса является ложным. когда я проверяю соединения с базой данных через SELECT * FROM pg_stat_activity where state = 'idle' Я вижу, что никакие запросы не заканчиваются правильно.

мой код Java для выполнения запроса БД выглядит следующим образом:

final AsyncSQLClient client = PostgreSQLClient.createShared(vertx, getConnectionData(), "mypool");
return client
  .rxGetConnection()
  .flatMap(conn -> conn.rxQuery(sql))
  .map(res -> {
    client.rxClose();
    return res;
  })
  .doOnError(err -> {
    client.rxClose();
  });

я использую io.vertx:vertx-mysql-postgresql-client:3.4.1 как водитель

0 ответов

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