上一篇【第64篇】Netty生产问题排查——OOM/CPU飙高/连接泄漏全解析下一篇【第66篇】Netty监控与可观测性——Metrics/Tracing/Logging全覆盖一、熔断器模式publicclassCircuitBreakerHandlerextendsChannelInboundHandlerAdapter{privatefinalAtomicIntegerfailuresnewAtomicInteger();privatefinalintthreshold10;// 10次失败熔断privatefinallongrecoveryTime30000;// 30秒恢复privatelonglastFailureTime;privateStatestateState.CLOSED;enumState{CLOSED,OPEN,HALF_OPEN}OverridepublicvoidchannelRead(ChannelHandlerContextctx,Objectmsg){if(stateState.OPEN){if(System.currentTimeMillis()-lastFailureTimerecoveryTime){stateState.HALF_OPEN;// 尝试恢复}else{ctx.writeAndFlush(Service unavailable);return;}}try{doBusiness(msg);stateState.CLOSED;failures.set(0);}catch(Exceptione){if(failures.incrementAndGet()threshold){stateState.OPEN;lastFailureTimeSystem.currentTimeMillis();System.out.println(Circuit breaker OPEN!);}}}}二、限流集成// 令牌桶限流publicclassRateLimiterHandlerextendsChannelInboundHandlerAdapter{privatefinalRateLimiterlimiterRateLimiter.create(1000);// 1000 QPSpublicvoidchannelRead(ChannelHandlerContextctx,Objectmsg){if(limiter.tryAcquire()){ctx.fireChannelRead(msg);// 放行}else{ctx.writeAndFlush(Rate limited, try again later);}}}三、连接数限制publicclassMaxConnectionHandlerextendsChannelInboundHandlerAdapter{privatefinalAtomicIntegerconnectionsnewAtomicInteger();privatefinalintmax10000;publicvoidchannelActive(ChannelHandlerContextctx){if(connections.incrementAndGet()max){System.out.println(连接数超限: max);ctx.close();// 拒绝新连接}}publicvoidchannelInactive(ChannelHandlerContextctx){connections.decrementAndGet();}}四、降级策略降级类型方案场景返回静态值返回默认响应非核心功能缓存降级返回缓存数据读多写少功能降级关闭非核心功能大促/故障上一篇【第64篇】Netty生产问题排查——OOM/CPU飙高/连接泄漏全解析下一篇【第66篇】Netty监控与可观测性——Metrics/Tracing/Logging全覆盖
【Netty源码解读和权威指南】第65篇:Netty优雅降级与熔断——高可用Netty服务的容错设计
上一篇【第64篇】Netty生产问题排查——OOM/CPU飙高/连接泄漏全解析下一篇【第66篇】Netty监控与可观测性——Metrics/Tracing/Logging全覆盖一、熔断器模式publicclassCircuitBreakerHandlerextendsChannelInboundHandlerAdapter{privatefinalAtomicIntegerfailuresnewAtomicInteger();privatefinalintthreshold10;// 10次失败熔断privatefinallongrecoveryTime30000;// 30秒恢复privatelonglastFailureTime;privateStatestateState.CLOSED;enumState{CLOSED,OPEN,HALF_OPEN}OverridepublicvoidchannelRead(ChannelHandlerContextctx,Objectmsg){if(stateState.OPEN){if(System.currentTimeMillis()-lastFailureTimerecoveryTime){stateState.HALF_OPEN;// 尝试恢复}else{ctx.writeAndFlush(Service unavailable);return;}}try{doBusiness(msg);stateState.CLOSED;failures.set(0);}catch(Exceptione){if(failures.incrementAndGet()threshold){stateState.OPEN;lastFailureTimeSystem.currentTimeMillis();System.out.println(Circuit breaker OPEN!);}}}}二、限流集成// 令牌桶限流publicclassRateLimiterHandlerextendsChannelInboundHandlerAdapter{privatefinalRateLimiterlimiterRateLimiter.create(1000);// 1000 QPSpublicvoidchannelRead(ChannelHandlerContextctx,Objectmsg){if(limiter.tryAcquire()){ctx.fireChannelRead(msg);// 放行}else{ctx.writeAndFlush(Rate limited, try again later);}}}三、连接数限制publicclassMaxConnectionHandlerextendsChannelInboundHandlerAdapter{privatefinalAtomicIntegerconnectionsnewAtomicInteger();privatefinalintmax10000;publicvoidchannelActive(ChannelHandlerContextctx){if(connections.incrementAndGet()max){System.out.println(连接数超限: max);ctx.close();// 拒绝新连接}}publicvoidchannelInactive(ChannelHandlerContextctx){connections.decrementAndGet();}}四、降级策略降级类型方案场景返回静态值返回默认响应非核心功能缓存降级返回缓存数据读多写少功能降级关闭非核心功能大促/故障上一篇【第64篇】Netty生产问题排查——OOM/CPU飙高/连接泄漏全解析下一篇【第66篇】Netty监控与可观测性——Metrics/Tracing/Logging全覆盖