Rx java vertx断路器不再闭合

Rx java vertx断路器不再闭合,rx-java,vert.x,circuit-breaker,Rx Java,Vert.x,Circuit Breaker,我的断路器有问题。如果我向我的服务发送垃圾邮件请求,电路将正确地打开并解决超时错误。在我设定的超时时间后,电路进入半开状态-一切正常。 但从这里开始,电路再也不会闭合。每次请求都会导致错误,并立即再次打开电路 我使用cb通过vertx事件总线在我的服务之间进行通信,如下所示: return this.circuitBreaker.rxExecuteCommandWithFallback( future -> this.vertx.eventBus().rxSend("myEvent",

我的断路器有问题。如果我向我的服务发送垃圾邮件请求,电路将正确地打开并解决超时错误。在我设定的超时时间后,电路进入
半开
状态-一切正常。 但从这里开始,电路再也不会闭合。每次请求都会导致错误,并立即再次打开电路

我使用cb通过vertx事件总线在我的服务之间进行通信,如下所示:

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);
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();
  });
我的断路器选项:

return new CircuitBreakerOptions()
  .setMaxFailures(10)
  .setTimeout(2000L)
  .setResetTimeout(5000L)
  .setMaxRetries(2)
  .setFallbackOnFailure(true);
我的配置错了吗?我是否可能使用了错误的rxified API

编辑 如果我在docker容器中运行代码,我只会得到错误:
io.vertx.core.impl.NOTACKTRACETHROWABLE:操作超时

如果我在本地启动应用程序,我会看到PG/SQL实际上抛出了一个
对不起,太多的客户机
异常。这当然可以解释为什么电路仍然打开,但由于我已经在成功和错误时关闭了我的客户,我真的不明白为什么会发生这种情况

--

我目前在请求后关闭连接的方式似乎是错误的。当我通过
SELECT*FROM pg_stat_activity,其中state='idle'
检查数据库连接时,我可以看到实际上没有请求正确终止

我执行db查询的java代码如下所示:

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);
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
作为驱动程序

似乎在半状态下,断路器检查交互,但仍然失败。在这种情况下,您是否返回了异常消息?只是添加了异常,以便断路器能够正常工作,是PG/SQL客户机在幕后发生了故障。你能分享这个代码吗?是的,你是对的,我的sql连接代码好像坏了,我添加了一个examplerxClose()返回一个,你需要订阅它:return client.rxGetConnection().flatMap(conn->conn.rxQuery(sql)).doInterminate(()->client.rxClose().subscribe(););似乎在半状态下,断路器检查相互作用,但仍然失败。在这种情况下,您是否返回了异常消息?只是添加了异常,以便断路器能够正常工作,是PG/SQL客户机在幕后发生了故障。你能分享这个代码吗?是的,你是对的,我的sql连接代码好像坏了,我添加了一个examplerxClose()返回一个,你需要订阅它:return client.rxGetConnection().flatMap(conn->conn.rxQuery(sql)).doInterminate(()->client.rxClose().subscribe(););