1

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」メソッドは期待どおりに呼び出されます。
  • これを無効にすると、すべてが機能します (メッセージのマーシャリング、接続、リモート プロセスなど)。

質問は次のとおりです。

  • それの何がいけないの ?
  • 接続状態 (接続されているかどうか) を知る良い方法ですか?
4

1 に答える 1