Как использовать сообщение без переадресации на остальную часть конвейера - PullRequest
0 голосов
/ 07 декабря 2011

У меня на сервере есть обработчик, который ищет конкретный экземпляр входящего сообщения, и когда он приходит, обработчик устанавливает внутренний атрибут. Поскольку я больше не использую входящее сообщение, я не хочу отправлять его в восходящем направлении остальной части конвейера, поэтому просто возвращаюсь из метода messageReceived ()

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

    ctx.sendUpstream(e);
}

Кажется, это блокирует мой конвейер, так как от клиента больше не поступает сообщений. Как мне отменить нежелательные сообщения, когда я больше их не использую?

Привет

Ответы [ 2 ]

0 голосов
/ 04 сентября 2012

Когда вы переопределяете метод получения сообщения, вы берете на себя ответственность за пересылку сообщения в цепочке. Поэтому, если вы не сделаете это явно, ваше сообщение будет уничтожено.

Когда вам нужно переслать ваше сообщение, звоните:

super.messageReceived(ctx, e)

В противном случае сообщение не будет переадресовано, что вам и нужно.

0 голосов
/ 05 января 2012

попробуйте это:

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

Использование return в методах void выглядит ИМХО странно / сбивает с толку

...