No need to use consumer at all here. I'd keep it as ChannelInboundHandlerAdapter whose messageReceived() calls releaseAllAndRecycle().