使用带有请求模式的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
});
}