如何为包含反应式 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"));
});
}
我遇到以下问题:
PgPool.pool(vertx, connectOptions, poolOptions)
需要一个 io.vertx.reactivex.core.Vertx
对象,因此我将导入更改为该对象。
- 但是 SensorDataService 接口中的
new SensorDataServiceVertxEBProxy(vertx, address)
调用需要一个正常的 io.vertx.core.Vertx
作为参数。
你知道如何解决这个问题吗?
提前致谢!
您可以通过调用 getDelegate:
解包底层 io.vertx.core.Vertx
实例
io.vertx.core.Vertx delegate = reactiveVertx.getDelegate();
我正在学习 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"));
});
}
我遇到以下问题:
PgPool.pool(vertx, connectOptions, poolOptions)
需要一个io.vertx.reactivex.core.Vertx
对象,因此我将导入更改为该对象。- 但是 SensorDataService 接口中的
new SensorDataServiceVertxEBProxy(vertx, address)
调用需要一个正常的io.vertx.core.Vertx
作为参数。
你知道如何解决这个问题吗?
提前致谢!
您可以通过调用 getDelegate:
解包底层io.vertx.core.Vertx
实例
io.vertx.core.Vertx delegate = reactiveVertx.getDelegate();