在工作者Verticle中发出两个请求,并合并来自两个请求的响应

时间:2015-05-07 03:16:39

标签: java vert.x

我有vertx服务器应用程序,我收到单个客户端请求,从服务器,我需要进行两次阻塞调用。例如,一次调用后端系统A,另一次调用后端系统B.我希望对这两个系统进行两次并发调用。我需要等待来自两个调用的响应,然后合并来自两个调用的两个数据,然后将响应发送回客户端。我无法弄清楚如何在worker verticle中执行此操作。

有人能推荐什么是vertx中最好的方法吗?

2 个答案:

答案 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();
}