我有vertx服务器应用程序,我收到单个客户端请求,从服务器,我需要进行两次阻塞调用。例如,一次调用后端系统A,另一次调用后端系统B.我希望对这两个系统进行两次并发调用。我需要等待来自两个调用的响应,然后合并来自两个调用的两个数据,然后将响应发送回客户端。我无法弄清楚如何在worker verticle中执行此操作。
有人能推荐什么是vertx中最好的方法吗?
答案 0 :(得分:2)
这听起来像是Promises的一个很好的用例。试试模块vertx-promises。
答案 1 :(得分:0)
从启动的期货中创建一个CompositeFuture并正常处理。
public Future<JsonArray> getEntitiesByIndFields(String keyspace, String entidad, String field1, String field2) {
Promise<JsonArray> p = Promise.promise();
// launch in parallel
Future<JsonArray> f1 = getEntitiesByIndField1(keyspace, entidad, field1);
Future<JsonArray> f2 = getEntitiesByIndField2(keyspace, entidad, field2);
CompositeFuture.all(f1, f2).setHandler(done ->
{
if (done.failed()) {
p.fail(done.cause());
return;
}
List<JsonArray> ja = done.result().list();
JsonArray finalarray = ja.get(0);
ja.get(1).forEach(jo ->
{ // add one by one, don't duplicate ids
long id = ((JsonObject) jo).getLong("id");
if (!containsKey(finalarray, id)) {
finalarray.add(jo);
}
});
;
p.complete(finalarray); // send union of founds
});
return p.future();
}