调用从Netty处理程序内部返回CompletionStage的服务时,如何最好地处理异常。

我的看法是,有两种类型的异常需要处理:


在被调用的服务内部生成CompletionStage时发生的异常
评估返回的CompletionStage的内容时发生异常


这足以涵盖这两种情况:

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  try {
    myService.call(arg1).whenComplete((response, throwable) -> {
      if (throwable != null) {
        ctx.fireExceptionCaught(throwable);
      } else {
        ctx.writeAndFlush(response);
      }
  } catch(Exception e) {
    if (e.getCause() instanceof DecoderException) {
      throw e;
    } else {
      throw new DecoderException(e.getCause());
    }
  }

最佳答案

是的,您在代码中显示的内容应正确覆盖两者。

10-08 19:40