Netty(バージョン3.6.1.final)を現在のシステムに統合して、現在のNIOコードを置き換えることができるようにしようとしています。
現在、他のリスナーが処理するためにイベントがキューに入れられ、さらに処理するために別のイベントをバスに戻すメッセージングバスがあります。
NettyビジネスロジックハンドラーのmessageReceived()メソッドで、バスに入力要求を追加します。私が渡すことの1つは、Nettyイベントメッセージからのデータです。
受信したデータ/メッセージとともに、このInputEventでChannelHandlerContextを渡す必要があると思います。そのため、最終的にOutputEventが処理されるときに、最初に渡されたChannelHandlerContextを使用して、処理されたデータを正しいNettyチャネル上の要求元のクライアントに送り返すことができます。
では、OutputEventを処理しているOutputタスクをNettyにどのように結び付けることができるでしょうか。
処理されたデータを入力として使用しているChannelHandlerContextを使用して呼び出しを発行しますか?出力タスクを拘束したくありません。
Nettyハンドラーからのコードスニペット。
public void messageReceived(
ChannelHandlerContext ctx, MessageEvent e) {
byte[] message = (byte[])e.getMessage();
try {
data.add(message);
}
catch( IOException ioe )
{
logger.error(ioe);
}
InputEvent ie = new InputEvent( ctx, this, data.getBuffer() );
try {
bus.enqueue(ie);
}
catch( Exception ex )
{
logger.error(ex);
}
出力プロセッサからのコードスニペット。
public void run() {
// note that the OutputEvent (event) is available here. This is not a Netty event.
ChannelHandlerContext ctx = event.getHandlerContext();
ClientChannel handler = event.getHandler();
// I need to send the data in event.getBuffer() back.
// Now what do I do here???
…
…
…
}
ありがとうございました。