在 Netty 处理程序中管理 CompletionStage

Manage CompletionStage inside of Netty handler

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

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

  1. 在被调用服务CompletionStage内部生成
  2. 异常
  3. 评估返回内容时出现的异常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());
    }
  }

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