我希望了解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备注:
问题是:
发布于 2013-09-03 15:11:37
尝试使用解码器选项,而不是使用整个客户端管道工厂。例如使用选项decoder=#myConnectionStatusHandler。然后在注册表中注册名为ConnectionStatusHandler的myConnectionStatusHandler。
如果您使用管道工厂,那么您需要添加所有其他骆驼添加的盒子。
https://stackoverflow.com/questions/18589629
复制相似问题