Netty 如何在不转发到管道其余部分的情况下使用消息

Netty 如何在不转发到管道其余部分的情况下使用消息,netty,Netty,我的服务器上有一个处理程序,它正在查找传入消息的特定实例,当它到达时,处理程序设置一个内部属性。由于我不再使用传入消息,我不想将其发送到管道的其余部分,因此我只需从messageReceived()方法返回 这似乎会阻塞我的管道,因为不再收到来自客户端的消息。当我不再使用不需要的消息时,如何丢弃它们 关于试试这个: @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { if (

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

这似乎会阻塞我的管道,因为不再收到来自客户端的消息。当我不再使用不需要的消息时,如何丢弃它们

关于

试试这个:

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

在void方法中使用“return”看起来很奇怪/混乱

当您重写message received方法时,您将负责在链中转发消息。因此,如果您不显式地这样做,您的消息就会被使用

当您需要转发邮件时,请致电:

super.messageReceived(ctx, e)

否则,消息将不会转发,这正是您想要的。

我认为您的代码没有任何问题。可能还有其他问题?所讨论的处理程序是9个处理程序管道中的第6个。使用上面列出的处理程序,在收到StartTimerCommand后,不再处理更多消息。如果我删除“return”并更改处理程序7、8和9以处理StartTimeCommand,那么一切都会按预期进行。您确定在第一个
StartTimeCommand
之后收到的消息不是
StartTimeCommand
?如果您能通过提供一个小样本应用程序并在我们的问题跟踪器中归档一个问题来帮助我们重现问题,那就太好了。从描述来看,这听起来像是偶数处理机制被破坏了,停止了处理事件。您提议的更改在功能上看起来是等效的。这个代码的改变能解决海报的问题吗?这个答案对这个问题没有帮助。
super.messageReceived(ctx, e)