我想知道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
说明:
问题是:
答案 0 :(得分:0)
请尝试使用解码器选项,而不是整个客户端管道工厂。
例如,使用选项decoder=#myConnectionStatusHandler
。然后在注册表中注册名为myConnectionStatusHandler的ConnectionStatusHandler。
如果您使用管道工厂,那么您需要添加Camel添加的所有其他工具。