Netty ChannelHandler - Как получить DefaultFullHttpResponse в channelRead0? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь настроить клиент запроса / ответа ChannelHandler. На данный момент я могу получить DefaultHttpResponse в моем методе channelRead0, но я не знаю, как получить DefaultFullHttpResponse.

Причина, по которой мне нужен DefaultFullHttpResponse, заключается в том, что DefaultHttpResponse, по-видимому, не содержит тела ответа, возвращенного с сервера.

My ChannelHander-

public class NettyClientHandler extends SimpleChannelInboundHandler<DefaultHttpResponse> {

    private ChannelHandlerContext ctx;
    private BlockingQueue<Promise<DefaultHttpResponse>> messageList = new LinkedBlockingQueue<>(1_000_000);

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        super.channelActive(ctx);
        this.ctx = ctx;
    }

    @Override
    public void channelRead0(ChannelHandlerContext ctx, DefaultHttpResponse msg) {
        synchronized (this) {
            messageList.poll().setSuccess(msg);
            System.out.println(msg);
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        cause.printStackTrace();
        ctx.close();
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx)
            throws Exception {
        super.channelReadComplete(ctx);
        System.out.println("channelReadComplete");

    }
}

А как настроен конвейер канала в ChannelPoolHandler-

@Override
public void channelCreated(Channel channel) throws Exception {
    channel.pipeline().addLast(sslContext.newHandler(channel.alloc()));
    channel.pipeline().addLast(new HttpClientCodec());
    channel.pipeline().addLast(new HttpContentDecompressor());
    channel.pipeline().addLast(new NettyClientHandler());
}

Я оглянулся, но не смог найти FullHttpClientCodec или опции в HttpClientCodec, которые позволили бы мне сделать это.

Как я могу получить DefaultFullHttpResponse для передачи в метод channelRead0?

...