Как создать прокси с поддержкой Rx для службы Vert.x, содержащей реактивный PostgreSQL клиент? - PullRequest
0 голосов
/ 11 марта 2020

Я изучаю Vert.x с книгой "Vert.x в действии". Следуя этому примеру здесь:

https://github.com/jponge/vertx-in-action/tree/master/chapter6

Я хотел бы расширить сервис для использования PostgreSQL DB. Когда я изменяю только конструктор SensorDataServiceImpl с:

SensorDataServiceImpl(Vertx vertx) {
    vertx.eventBus().<JsonObject>consumer("sensor.updates", message -> {
      JsonObject json = message.body();
      lastValues.put(json.getString("id"), json.getDouble("temp"));
    });
}

на

SensorDataServiceImpl(Vertx vertx) {
    PgConnectOptions connectOptions = new PgConnectOptions()
            .setPort(5432)
            .setHost("host")
            .setDatabase("db")
            .setUser("user")
            .setPassword("pass")
            .setSslMode(SslMode.VERIFY_CA)
            .setPemTrustOptions(new PemTrustOptions().addCertPath("root.crt"));

    PoolOptions poolOptions = new PoolOptions().setMaxSize(5);

    io.vertx.reactivex.pgclient.PgPool dbPool = PgPool.pool(vertx, connectOptions, poolOptions);

    Single<RowSet<Row>> single = dbPool.rxQuery(sqlQueries.get(SqlQuery.CREATE_PAGES_TABLE));

    single.subscribe(result -> {
        System.out.println("Got " + result.size() + " rows ");
    }, err -> {
        System.out.println("Failure: " + err.getMessage());
    });

    vertx.eventBus().<JsonObject>consumer("sensor.updates", message -> {
        JsonObject json = message.body();
        lastValues.put(json.getString("id"), json.getDouble("temp"));
    });
}

, я получаю следующие проблемы:

  1. PgPool.pool(vertx, connectOptions, poolOptions) ожидает объект io.vertx.reactivex.core.Vertx, поэтому я изменяю импорт на этот.
  2. Но затем вызов new SensorDataServiceVertxEBProxy(vertx, address) в интерфейсе SensorDataService ожидает нормальный io.vertx.core.Vertx в качестве параметра.

Знаете ли вы, как решить эту проблему?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете развернуть базовый экземпляр io.vertx.core.Vertx, вызвав getDelegate :

io.vertx.core.Vertx delegate = reactiveVertx.getDelegate();
...