Vertx事件总线rx异常处理

时间:2017-09-12 20:34:24

标签: rx-java vert.x

当使用具有请求 - 回复模式的Vertx事件总线时,我最终会遇到我想避免的重复异常处理。 我有以下代码:

void handle(Message<JsonObject> message) {
    try {
        // do stuff
        message.reply(..);
    } catch (Exception e) {
        message.fail(..);  // in any case reply with fail msg
    }
 }

但现在假设我们使用这样的javarx服务:

void handle(Message<JsonObject> message) {
    try {
        // do some stuff..
        service.foo()
            .subscribe(x -> {
                message.reply(..);
            }, t -> {
                message.fail(..); // how to avoid this duplication??
            });
    } catch (Exception e) {
        message.fail(..);  // in any case reply with fail msg
    }
 }

我必须捕获一般异常,而且我必须订阅onError。在这两种情况下,我只想回复相同的一般失败消息。如何避免这种重复?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,因为我通过将所有代码包装在像这样的Rx结构中来提出解决方案:

void handle(Message<JsonObject> message) {
    // do some stuff..
    Single.just(message)
        .flatMap(m -> {
           // so some stuff..
           return service.foo();
         })
        .subscribe(x -> {
            message.reply(..);
        }, t -> {
            message.fail(..); // we get here even if 'do some stuff' part throws runtimeexception
        });
 }