使用netty搭建机器间通信客户端时,报了如下错误
08-21 17:27:55 [ WARN] [http-nio-8081-exec-379] Force-closing a channel whose registration task was not accepted by an event loop: [id: 0x2e20a0eb]
java.util.concurrent.RejectedExecutionException: event executor terminated
at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:855)
at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:340)
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:333)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:766)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:472)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81)
at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86)
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:322)
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:159)
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:143)
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:127)
原因:eventloop实现的线程池被关闭了,导致channel向eventloop注册,向SingleThreadEventExecutor添加task时被拒绝了。
解决办法:谨慎使用 group.shutdownGracefully();
,在确保连接不再使用时,再shutdown