首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写后的Netty 4 io.netty.channel.PartialFlushException

写后的Netty 4 io.netty.channel.PartialFlushException
EN

Stack Overflow用户
提问于 2013-02-20 12:30:56
回答 1查看 415关注 0票数 0

在我的代码中的新通道上的第二个.write上,用于写操作的ChannelFuture.isSuccess是假的,ChannelFuture.causeio.netty.channel.PartialFlushException: 0 out of 1 message(s) flushed。我不知道应该做些什么来避免这种情况,也不知道在哪里寻找更深层次的根源。

ChannelFuture.cause.getStackTraceString是:

io.netty.channel.ChannelOutboundMessageHandlerAdapter.flush(ChannelOutboundMessageHandlerAdapter.java:118) io.netty.channel.CombinedChannelDuplexHandler.flush(CombinedChannelDuplexHandler.java:237) io.netty.channel.DefaultChannelHandlerContext.invokeFlush0(DefaultChannelHandlerContext.java:1308) io.netty.channel.DefaultChannelHandlerContext.write0(DefaultChannelHandlerContext.java:1445) io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:1412) io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:1034) io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:959) io.netty.channel.AbstractChannel.write(AbstractChannel.java:246) pipe.Broker$writer$.write(Broker.scala:72) pipe.Broker$httpClientHandler.messageReceived(Broker.scala:57) pipe.Broker$httpClientHandler.messageReceived(Broker.scala:52) io.netty.channel.ChannelInboundMessageHandlerAdapter.inboundBufferUpdated(ChannelInboundMessageHandlerAdapter.java:104) io.netty.channel.DefaultChannelHandlerContext.invokeInboundBufferUpdated(DefaultChannelHandlerContext.java:951) io.netty.channel.DefaultChannelHandlerContext.fireInboundBufferUpdated0(DefaultChannelHandlerContext.java:926) io.netty.channel.DefaultChannelHandlerContext.fireInboundBufferUpdated(DefaultChannelHandlerContext.java:904) io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:466) io.netty.handler.codec.ByteToMessageDecoder.inboundBufferUpdated(ByteToMessageDecoder.java:69) io.netty.channel.ChannelInboundByteHandlerAdapter.inboundBufferUpdated(ChannelInboundByteHandlerAdapter.java:51) io.netty.channel.CombinedChannelDuplexHandler.inboundBufferUpdated(CombinedChannelDuplexHandler.java:194) io.netty.channel.DefaultChannelHandlerContext.invokeInboundBufferUpdated(DefaultChannelHandlerContext.java:951) io.netty.channel.DefaultChannelHandlerContext.fireInboundBufferUpdated0(DefaultChannelHandlerContext.java:926) io.netty.channel.DefaultChannelHandlerContext.fireInboundBufferUpdated(DefaultChannelHandlerContextio.netty.channel.DefaultChannelPipeline.fireInboundBufferUpdated(DefaultChannelPipeline.java:909) io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:115) io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:401) io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:365) io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:302) io.netty.channel.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:110) java.lang.Thread.run(未知来源)

通道上的第一个.write进行得很好(isSuccess是真的,并且书面消息完全到达目的地并在目的地解析)。但是第二个.write总是失败,正如所描述的那样。

当我的重写的ChannelInboundMessageHandlerAdapter.messageReceived方法接收到远程对等方接收到第一个.write的确认时,就会从它中发出第二个.write。

我执行实际写入(这是Scala)的代码是:

代码语言:javascript
复制
 request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/"+msg)
              var writeFuture = channel.write(request).addListener(new ChannelFutureListener(){
                  def operationComplete(channelFuture: ChannelFuture){
                    if (channelFuture.isSuccess)
                        println("write finished successfully")
                    else 
                        println ("write failed: " + channelFuture.cause + "\n" + channelFuture.cause.getStackTraceString)
                  }
              })

问题是什么,应该如何追踪?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-23 00:41:45

PartialFlushException包含刷新失败的实际原因。您可以使用Java提供的Exception.getCause()方法获得它:

代码语言:javascript
复制
PartialFlushException e = ...;
e.getCause(); // This will return the exception you raised.

要获得异常的完整信息,您必须调用printStackTrace(),而不是打印异常。

代码语言:javascript
复制
future.cause.printStackTrace()

有关链接异常的详细信息,请参阅本教程

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14979926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档