2012-05-04 21 views
0

新しいリクエストを受け取った場合、MessageEventLinkedBlockingQueueに配置します。 別のスレッドがLinkedBlockingQueueからMessageEventを読み取るように実行しているので、messageEventを処理してクライアントに書き込みます。しかし、クライアントに書き込むと、例外が発生します。ここでNetty ClosedChannelException非同期処理で受信メッセージが処理された場合

が私のコードです:

@Override 
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { 
    LogConsole.info(e.toString()); 
    messageReceivedQueue.addReceivedMessage(e); 
} 

public void run() { 
    MessageEvent e = messageReceivedQueue.get();  
    e.getChannel().write(e.getMessage()); 
} 

そして、ここでは、私が取得エラーです:

java.nio.channels.ClosedChannelException 
    at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:645) 
    at org.jboss.netty.channel.socket.nio.NioWorker.writeFromUserCode(NioWorker.java:372) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:137) 
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76) 
    at org.jboss.netty.channel.Channels.write(Channels.java:632) 
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:70) 
    at org.jboss.netty.channel.Channels.write(Channels.java:611) 
    at org.jboss.netty.channel.Channels.write(Channels.java:578) 
    at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:251) 
    at com.bankht.cis.tcs.service.executor.adapter.AbstractMessageAdapter$ProcessWorker.run(AbstractMessageAdapter.java:97) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

答えて

0

これは、チャネルがその間に閉鎖されたことを示しています。クライアントが常にソケットを閉じるかもしれないので、それについてはあまりできません。

+0

あなたは正しいです。クライアントに書き込む前にチャンネルが閉じられていることがわかりました。 messageReceivedメソッドでクライアントに書き込むと、クライアントに正常に送信されます。私は混乱しています。このように@Override public void messageReceived(ChannelHandlerContext ctx、MessageEvent e){ e.getChannel()。write( "resp:" + e.getMessage()。toString()); } – kevin

関連する問題