我在Vertx中使用NetServer
,并且在连接新客户端时,会创建一个可流动的流,以发送在该NetClient
上接收到的数据包。为了弄清楚如何进行适当的异常处理,我在流程中添加了一些随机异常:
private RecordParser createParser(NetState state, FlowableEmitter<Buffer> emitter) {
RecordParser parser = RecordParser.newFixed(4);
parser.handler(buffer -> {
if(Math.random() > 0.8) {
logger.error("I am dying now");
throw new RuntimeException();
}
// protocol handling
}).exceptionHandler((throwable) -> {
logger.error("Got an exception: ", throwable);
emitter.onError(throwable);
});
return parser;
}
我这样使用:
NetState state = new NetState();
// client -> NetClient
return Flowable.create(emitter -> client.handler(createParser(state, emitter)), BackpressureStrategy.ERROR);
现在的问题是,记录解析器中抛出的异常从未到达任何异常处理程序。 RecordParser
本身之一和我附加到client
的那个都没有。它全部取决于根上下文。如何捕获记录解析期间发生的异常(例如,以关闭发送无效数据的客户端)