netty-AbstractChannel

本文探讨了Netty框架中Channel的可写性判断逻辑,解析了protectedAbstractChannel类中isWritable方法的实现原理,该方法通过检查ChannelOutboundBuffer的状态来确定Channel是否可以进行写操作。
 protected AbstractChannel(Channel parent) {
        this.parent = parent;
        id = newId();
        unsafe = newUnsafe();
        pipeline = newChannelPipeline();
    }
        @Override
    public boolean isWritable() {
        ChannelOutboundBuffer buf = unsafe.outboundBuffer();
        return buf != null && buf.isWritable();
    }

ChannelOutboundBuffer.isWritable()

/**
    * Returns {@code true} if and only if {@linkplain #totalPendingWriteBytes() the total number of pending bytes} did
    * not exceed the write watermark of the {@link Channel} and
    * no {@linkplain #setUserDefinedWritability(int, boolean) user-defined writability flag} has been set to
    * {@code false}.
    */
   public boolean isWritable() {
       return unwritable == 0;
   }
Caused by: io.lettuce.core.RedisException: Connection closed at io.lettuce.core.protocol.DefaultEndpoint.notifyDrainQueuedCommands(DefaultEndpoint.java:679) ~[lettuce-core-6.1.10.RELEASE.jar!/:6.1.10.RELEASE] at io.lettuce.core.protocol.CommandHandler.channelInactive(CommandHandler.java:358) ~[lettuce-core-6.1.10.RELEASE.jar!/:6.1.10.RELEASE] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:303) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:281) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:274) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:81) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.lettuce.core.protocol.RedisHandshakeHandler.channelInactive(RedisHandshakeHandler.java:89) ~[lettuce-core-6.1.10.RELEASE.jar!/:6.1.10.RELEASE] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:305) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:281) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:274) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:81) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.lettuce.core.ChannelGroupListener.channelInactive(ChannelGroupListener.java:69) ~[lettuce-core-6.1.10.RELEASE.jar!/:6.1.10.RELEASE] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:305) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:281) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:274) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:301) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:281) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.AbstractChannel$AbstractUnsafe$7.run(AbstractChannel.java:813) ~[netty-transport-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[netty-common-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) ~[netty-common-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:413) ~[netty-transport-classes-epoll-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.101.Final.jar!/:4.1.101.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.101.Final.jar!/:4.1.101.Final] ... 1 common frames omitted 什么错误
10-10
java.net.BindException: Address already in use: bind at java.base/sun.nio.ch.Net.bind0(Native Method) ~[na:na] at java.base/sun.nio.ch.Net.bind(Net.java:565) ~[na:na] at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:344) ~[na:na] at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:301) ~[na:na] at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:141) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:561) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1281) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:600) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:579) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:922) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:259) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] Suppressed: java.lang.RuntimeException: Rethrowing promise failure cause at io.netty.util.concurrent.DefaultPromise.rethrowIfFailed(DefaultPromise.java:685) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:419) ~[netty-common-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:119) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:30) ~[netty-transport-4.1.122.Final.jar:4.1.122.Final] at com.xxl.job.core.server.EmbedServer$1.run(EmbedServer.java:80) ~[xxl-job-core-2.4.0.jar:na] ... 1 common frames omitted
07-04
2025-09-06 09:00:49,468 WARN [acceptorWorkerGroup-3-1][io.netty.channel.ChannelInitializer] Failed to initialize a channel. Closing: [id: 0x6a2a1e54, L:/10.7.54.36:30930 - R:/10.6.9.43:52758] java.lang.VerifyError: Local variable table overflow Exception Details: Location: io/netty/handler/codec/ByteToMessageDecoder.<init>()V @18: fload_3 Reason: Local index 3 is invalid Bytecode: 0x0000000: 2ab7 017f 2ab2 0124 b500 382a 03b5 0059 0x0000010: 2a00 25b5 0022 2ab6 0182 2a4c a700 0c00 0x0000020: 00bf 4d00 105e 0010 0160 b901 6603 00a7 0x0000030: fff6 a7ff f6b1 Exception Handler Table: bci [28, 31] => handler: 34 Stackmap Table: full_frame(@31,{},{Object[#211]}) full_frame(@34,{Object[#2],Object[#2]},{Object[#211]}) append_frame(@50,Object[#211]) chop_frame(@53,1) at com.huatai.xtrade.xstep.commu.acceptor.XStepAcceptor$XStepNormalChannelInitializer.initChannel(XStepAcceptor.java:421) ~[xstep-1.3.22-SNAPSHOT.jar!/:?] at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:989) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:610) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1461) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1126) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:651) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:514) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:427) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:495) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-all-4.1.33.Final.jar!/:4.1.33.Final] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_202]
09-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值