Как получить результат из EventBus с помощью Vert.x

ребята!

При использовании Vert.x я обнаружил, что не могу получить результат из EventBus при общении с другим Verticle.

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 и вернуть его?


person Ukonn Ra    schedule 14.05.2018    source источник
comment
Код выглядит нормально. Возвращает ли он какое-либо сообщение? Тайм-аут? Исключение? Вы пытались напечатать тело ответа?   -  person Francesco    schedule 15.05.2018


Ответы (1)


Вы должны не возвращать результат, а вместо этого уведомлять обработчик

Следующий код предполагает, что ваш метод Result.succeeed или Result.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"));
            }
  ...
}
person Gerald Mücke    schedule 15.05.2018