camel/netty環境での接続状態を知りたいです。
そのために、次のようなことを試しました。
- 私のラクダルートを指定しました
from("direct:in").marshal().serialization()
.to("netty:tcp://localhost:42123?clientPipelineFactory=#cpf&sync=false");
- パイプライン ファクトリを実装しました
public class ConnectionStatusPipelineFactory extends ClientPipelineFactory {
@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline cp = Channels.pipeline();
cp.addLast("statusHandler", new ConnectionStatusHandler());
return cp;
}
@Override
public ClientPipelineFactory createPipelineFactory(NettyProducer producer) {
return new ConnectionStatusPipelineFactory();
}
}
- 接続ステータスハンドラーを実装しました
public class ConnectionStatusHandler extends SimpleChannelUpstreamHandler {
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
System.out.println("Event: " + e);
super.channelConnected(ctx, e);
}
@Override
public void channelDisconnected(ChannelHandlerContext ctx,
ChannelStateEvent e) throws Exception {
System.out.println("Event: " + e);
super.channelDisconnected(ctx, e);
}
}
最後に、camel レジストリで「ConnectionStatusPipelineFactory」を「cpf」にバインドしました。
しかし、次の例外が発生しました。
java.lang.IllegalArgumentException: unsupported message type: class [B
備考:
- 「channelConnected」および「channelDisconnected」メソッドは期待どおりに呼び出されます。
- これを無効にすると、すべてが機能します (メッセージのマーシャリング、接続、リモート プロセスなど)。
質問は次のとおりです。
- それの何がいけないの ?
- 接続状態 (接続されているかどうか) を知る良い方法ですか?