如何使用消息而不转发到其余的管道

时间:2011-12-07 09:41:57

标签: netty

我的服务器上有一个处理程序,它正在寻找传入消息的特定实例,当它到达时,处理程序设置一个内部属性。由于我没有进一步使用传入消息,我不想将其上游发送到管道的其余部分,所以我只是从messageReceived()方法返回。

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    if (e.getMessage() instanceof StartTimerCommand) {
        trigger.getAndSet(true);
        return;
    }

    ctx.sendUpstream(e);
}

这似乎具有阻止我的管道的效果,因为不再从客户端收到消息。当我不再使用不需要的消息时,如何丢弃不需要的消息?

此致

2 个答案:

答案 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”看起来很奇怪/混乱