netty异常处理源码解析

本文深入解析Netty 3.2.5版本中的异常处理源码,特别是事件处理机制。当异常发生时,如何通过SimpleChannelUpstreamHandler的exceptionCaught方法进行处理。在Dubbo 2.5.3中,NettyHandler重写了异常处理,如果线程池达到最大容量,将会触发拒绝策略,导致"Thread pool is EXHAUSTED"错误。AllChannelHandler使用同一线程池处理连接、异常和心跳,这个问题在dubbo后续版本中有所改进。
摘要由CSDN通过智能技术生成

netty异常处理源码解析

netty 3.2.5: 事件处理

前段时间因为dubbo线程池的问题,着手研究了一下netty异常的处理,下面是我的分析,并结合dubbo2.5.3版本说明dubbo服务应用这个异常的方式。

说明: netty版本 3.2.5   ,netty4的代码有很大的变动,慢慢分析原理差不多的,懂NIO的一看就懂。

nettyServer初始化时,默认ChannelPipe :  org.jboss.netty.channel.DefaultChannelPipeline

该类的方法:

 public void sendUpstream(ChannelEvent e) {
        DefaultChannelHandlerContext head = getActualUpstreamContext(this.head);  获取到 head 为空时结束
        if (head == null) {
            logger.warn(
                    "The pipeline contains no upstream handlers; discarding: " + e);
            return;
        }

        sendUpstream(head, e);
    }

void sendUpstream(DefaultChannelHandlerContext ctx, ChannelEvent e) {
        try {
            ((ChannelUpstreamHandler) ctx.getHandler()).handleUpstream(ctx, e);
        } catch (Throwable t) {//调用next handler如果出现问题,执行notifyHandlerException方法
            notifyHandlerException(e, t);
        }
    }

 protected void notifyHandlerException(ChannelEvent e, Throwable t) {
        if (e instanceof ExceptionEvent) {//如果检测到事件类型为ExceptionEvent,进行日志打印,return,程序返回
            logger.warn(
                    "An exception was thrown by a user handler " +
                    "while handling an exception eve
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值