Vertx eventbus rx exceptionhandling



使用带有请求模式的vertx eventbus时,我最终要避免使用重复的例外处理。我有以下代码:

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。在这两种情况下,我只想用相同的一般失败消息回复。如何避免此重复?

回答我自己的问题,因为我通过将所有代码包装在这样的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
        });
 }

最新更新