在camel / netty环境中观察连接状态

时间:2013-09-03 10:13:41

标签: java apache-camel netty

我想知道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);
        }
    }

最后在我的骆驼注册表中将“ConnectionStatusPipelineFactory”绑定到“cpf”。

但发生了以下异常:

java.lang.IllegalArgumentException: unsupported message type: class [B

说明:

  • “channelConnected”和“channelDisconnected”方法按预期调用。
  • 当我禁用此功能时,一切正常(消息编组,连接,远程进程......)。

问题是:

  • 那有什么不对?
  • 是了解连接状态(连接与否)的好方法吗?

1 个答案:

答案 0 :(得分:0)

请尝试使用解码器选项,而不是整个客户端管道工厂。 例如,使用选项decoder=#myConnectionStatusHandler。然后在注册表中注册名为myConnectionStatusHandler的ConnectionStatusHandler。

如果您使用管道工厂,那么您需要添加Camel添加的所有其他工具。