0
新しいリクエストを受け取った場合、MessageEvent
をLinkedBlockingQueue
に配置します。 別のスレッドが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)
あなたは正しいです。クライアントに書き込む前にチャンネルが閉じられていることがわかりました。 messageReceivedメソッドでクライアントに書き込むと、クライアントに正常に送信されます。私は混乱しています。このように@Override public void messageReceived(ChannelHandlerContext ctx、MessageEvent e){ e.getChannel()。write( "resp:" + e.getMessage()。toString()); } – kevin