java - 如何使用 Vert.x 从 EventBus 中获取结果

标签 java async-await vert.x event-bus

伙计们!

在使用 Vert.x 时,我发现在与其他 Verticle 通信时无法从 EventBus 中获取结果。

class Result<T> {
    public T value;
    public String message;
    // ...
}

private Result<Integer> someMethod() {
        try {
            var json = new JsonObject();
            vertx.eventBus().<JsonObject>send(Service.EVENT_BUS_ADDRESS, json, ar -> {
                if (ar.succeeded()) {
                    var result = new Result<List>(ar.result().body());
                    if (result.isSuccessful()) {
                        Result.succeed(result);
                    } else {
                        Result.fail(result.message);
                    }
                } else {
                    Result.fail("Remote server error");
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            return Result.fail(e.getMessage());
        }
        return // how can I return the result in EventBus???
    }

那么如何从 Async block 中获取值并返回它?

最佳答案

您不应该返回结果,而应该通知处理程序

以下代码假设您的 Result.succeeeedResult.fail 方法返回 Result 的实例

private void someMethod(Handler<Result> resultHandler) {
  ...
  vertx.eventBus().<JsonObject>send(Service.EVENT_BUS_ADDRESS, json, ar -> {
            if (ar.succeeded()) {
                var result = new Result<List>(ar.result().body());
                if (result.isSuccessful()) {
                    resultHandler.handle(Result.succeed(result));
                } else {
                    resultHandler.handle(Result.fail(result.message));
                }
            } else {
                resultHandler.handle(Result.fail("Remote server error"));
            }
  ...
}

关于java - 如何使用 Vert.x 从 EventBus 中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334261/

相关文章:

带有 SSL 和 Postman 的 java.nio.channels.ClosedChannelException

java - Docker CMD + ENTRYPOINT 与命令行行为不匹配

java - 使用 MSI 从本地运行的 java 应用程序连接到 Azure Keyvault 的方法

javascript - 安装vertx时出错(vertx运行server.js)

java - 在 0,0 坐标处启动 Random Walker java 程序时遇到问题

c# - 在 C# 中有没有一种方法可以调用异步方法而不使调用者也异步?

javascript - 如何在 sequelize findAll() 中获取简单数组?

c# - 异步任务。运行不工作

c# - byte[] 编码 Base64(byte[] 二进制数据) 在 C# 中等效

java - 如何从 SwingWorker doInBackground 内部调用 JFileChooser 并等待答案?