当使用具有请求 - 回复模式的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。在这两种情况下,我只想回复相同的一般失败消息。如何避免这种重复?
答案 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
});
}