如何为包含反应式 PostgreSQL 客户端的 Vert.x 服务生成 Rx 化代理?

How to generate an Rx-ified proxy for a Vert.x service containing a reactive PostgreSQL client?

我正在学习 Vert.x "Vert.x in Action" 这本书。在此处遵循此示例:

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

我想扩展服务以便使用 PostgreSQL 数据库。当我只更改 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. 但是 SensorDataService 接口中的 new SensorDataServiceVertxEBProxy(vertx, address) 调用需要一个正常的 io.vertx.core.Vertx 作为参数。

你知道如何解决这个问题吗?

提前致谢!

您可以通过调用 getDelegate:

解包底层 io.vertx.core.Vertx 实例
io.vertx.core.Vertx delegate = reactiveVertx.getDelegate();