当前位置: 首页 > 知识库问答 >
问题:

在worker verticle中发出两个请求并合并来自两个请求的响应

令狐昌胤
2023-03-14

我有一个vertx服务器应用程序,在那里我收到单客户端请求,从服务器,我需要进行两次阻塞调用。例如,一个调用后端系统A,另一个调用后端系统B。我希望同时调用两个系统。我需要等待两个调用的响应,然后合并两个调用中的两个数据,然后将响应发送回客户端。我不知道如何在工人垂直运动中做到这一点。

有谁能推荐vertx中最好的方法吗?

共有2个答案

孙帅
2023-03-14

从您启动的未来创建一个复合未来,并正常处理它。

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();
}
周超英
2023-03-14

这听起来像是Promises的一个很好的用例。尝试一下模块vertx-promise。

 类似资料:
  • 设置您的本地环境 步骤1: 复制 步骤2: 构建 步骤3: 分支 进行更改 步骤4: 编写代码 步骤5: 提交更改 提交代码说明的指导 步骤6:变基 步骤7: 测试 步骤8: 推送代码 步骤9: 新建一个合并代码请求 步骤10: 讨论和更新 批准和请求更改工作流程 步骤11: 执行合并 持续集成测试 设置您的本地环境 步骤1: 复制 在 GitHub 上复制项目到你的账号并把项目克隆到本地。 $

  • GitLab可以引用提交消息中的特定问题来解决特定的问题。 在本章中,我们将讨论如何在GitLab中引用问题: 步骤(1): 要引用问题,您需要创建问题的问题编号。 要创建问题,请参阅创建问题章节。 步骤(2): 要查看创建的问题,请单击Issues选项卡下的List选项: 步骤(3): 在对本地存储库进行更改之前,请使用以下命令检查它是否为最新版本: 命令从远程服务器下载最新的更改并直接集成到当

  • 主要内容:合并请求的步骤合并请求可用于对项目其他人员之间所做的代码进行交换,与他们讨论更改。 合并请求的步骤 步骤(1): 在创建新的合并请求之前,应该在GitLab中创建一个分支。 您可以参考本章创建分支: 步骤(2): 登录到您的GitLab帐户并转到项目部分下的项目: 步骤(3): 点击选项卡,然后点击New merge request 按钮: 步骤(4): 要合并请求,请从下拉列表中选择源分支和目标分支,然后单击

  • 问题内容: 当我使用JQuery一起发送两个ajax请求时,响应一起出现 例如 ajax.php,ajax2.php是两个文件,其中包含一个虚拟的for循环大约需要5秒钟。 萤火虫萤幕 POST本地主机/ajax.php 200 OK 4.77s POST本地主机/ajax.php 200 OK 4.37s 在这里,每个请求大约需要5秒钟才能执行… 当我在symfony做相同的例子时,我得到了不同

  • 问题内容: 我同时运行两个AJAX请求时遇到问题。我有一个PHP脚本正在将数据导出到XSLX。此操作需要很多时间,因此我尝试向用户显示进度。我正在使用AJAX和数据库方法。实际上,我非常确定它曾经可以工作,但是我不知道为什么,它不再在任何浏览器中都能工作。新浏览器有什么变化吗? 在数据库中正确更新进度 JS计时器正在尝试获取进度,我可以在控制台中看到它,但是所有这些请求都加载第一个脚本的整个持续时

  • 我在多个线程上运行以下方法: HTTP请求是并行处理的吗?以这种方式发出请求是否会阻止其他线程发送请求,直到第一个响应到达?