我想知道骆驼/网络环境中的连接状态。
为此,我尝试了这样的事情:
- 指定了我的骆驼路线
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”方法按预期调用。
- 当我禁用它时,一切正常(消息编组、连接、远程进程......)。
问题是:
- 那有什么问题?
- 这是了解连接状态(连接与否)的好方法吗?