我的服務器上有一個處理程序,它正在查找傳入消息的特定實例,並且在它到達時處理程序設置了內部屬性。由於我沒有進一步使用傳入消息,因此我不想將其發送到管道的其餘部分,因此我只是從messageReceived()方法返回。如何消費一條消息而不轉發給管道的其餘部分
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
if (e.getMessage() instanceof StartTimerCommand) {
trigger.getAndSet(true);
return;
}
ctx.sendUpstream(e);
}
這似乎有阻塞我的管道,因爲沒有更多的消息從客戶端收到的效果。當我沒有進一步使用它們時,我該如何丟棄不需要的消息?
問候
我沒有看到您的代碼有任何問題。也許別的什麼是錯的? – trustin
有問題的處理程序在9個處理程序的管道中是6號。使用上面列出的處理程序,在接收到StartTimerCommand之後不再處理消息。如果我刪除「返回」並更改處理程序7,8和9來處理StartTimerCommand,那麼一切都按預期工作。 – user497087
您確定您在第一個「StartTimerCommand」之後收到的消息不是「StartTimerCommand」嗎?如果您可以通過提供一個小樣本應用程序並在問題跟蹤器中提出問題來幫助我們重現問題,那將非常棒。 – trustin