我的服务器上有一个处理程序,它正在寻找传入消息的特定实例,当它到达时,处理程序设置一个内部属性。由于我没有进一步使用传入消息,我不想将其上游发送到管道的其余部分,所以我只是从messageReceived()方法返回。
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
if (e.getMessage() instanceof StartTimerCommand) {
trigger.getAndSet(true);
return;
}
ctx.sendUpstream(e);
}
这似乎具有阻止我的管道的效果,因为不再从客户端收到消息。当我不再使用不需要的消息时,如何丢弃不需要的消息?
此致
答案 0 :(得分:0)
当您覆盖收到的消息方法时,您负责转发链中的消息。因此,如果您没有明确地执行此操作,则会消耗您的消息。
每当您需要转发消息时,请致电:
super.messageReceived(ctx, e)
否则将不会转发该消息,这就是您想要的。
答案 1 :(得分:-2)
试试这个:
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
if (e.getMessage() instanceof StartTimerCommand) {
trigger.getAndSet(true);
}
else {
ctx.sendUpstream(e);
}
}
在void方法中使用“return”看起来很奇怪/混乱