code: private void disconnect(final Handler<AsyncResult<Void>> doneHandler) {
      eventBus.sendWithTimeout(inAddress, new JsonObject().putString("action", "disconnect"), 5000, new Handler<AsyncResult<Message<Boolean>>>() {
        @Override
        public void handle(AsyncResult<Message<Boolean>> result) {
          if (result.failed()) {
            ReplyException failure = (ReplyException) result.cause();
            if (failure.failureType().equals(ReplyFailure.RECIPIENT_FAILURE)) {
              log.warn(String.format("%s - Failed to disconnect from %s", DefaultOutputConnection.this, context.target()), result.cause());
              new DefaultFutureResult<Void>(failure).setHandler(doneHandler);
            } else if (failure.failureType().equals(ReplyFailure.NO_HANDLERS)) {
              log.info(String.format("%s - Disconnected from %s", DefaultOutputConnection.this, context.target()));
              new DefaultFutureResult<Void>((Void) null).setHandler(doneHandler);
            } else {
              log.debug(String.format("%s - Disconnection from %s failed, retrying", DefaultOutputConnection.this, context.target()));
              disconnect(doneHandler);
            }
          } else if (result.result().body()) {
            log.info(String.format("%s - Disconnected from %s", DefaultOutputConnection.this, context.target()));
            open = false;
            new DefaultFutureResult<Void>((Void) null).setHandler(doneHandler);
          } else {
            log.debug(String.format("%s - Disconnection from %s failed, retrying", DefaultOutputConnection.this, context.target()));
            vertx.setTimer(500, new Handler<Long>() {
              @Override
              public void handle(Long timerID) {
                disconnect(doneHandler);
              }
            });
          }
        }
      });
    }
docs: Disconnects from the other side of the connection.