Java 获取最后一个ChannelInboundHandler的结果

Java 获取最后一个ChannelInboundHandler的结果,java,netty,Java,Netty,我正在写一个基于Netty的客户端应用程序。我想提取管道中最后一个处理程序的结果 这条管道是用塑料建造的 protectedvoid initChannel(SocketChannel ch)引发异常{ ChannelPipeline p=通道管道(); 如果(sslCtx!=null) p、 addLast(“ssl”,sslCtx.newHandler(ch.alloc()); p、 addLast(“客户端”,新的HttpClientCodec()); p、 addLast(“解压器”,新

我正在写一个基于Netty的客户端应用程序。我想提取管道中最后一个处理程序的结果

这条管道是用塑料建造的

protectedvoid initChannel(SocketChannel ch)引发异常{
ChannelPipeline p=通道管道();
如果(sslCtx!=null)
p、 addLast(“ssl”,sslCtx.newHandler(ch.alloc());
p、 addLast(“客户端”,新的HttpClientCodec());
p、 addLast(“解压器”,新的HttpContentDecompressor());
p、 addLast(“聚合器”,新的HttpObjectAggregator(HTTP_OBJECT_MAX_SIZE));
p、 addLast(“我的处理程序”,新的MyApiResponseChannelHandler());
}
最终实现在哪里

公共类MyApiResponseChannelHandler扩展MessageToMessageDecoder{
@凌驾
受保护的无效解码(ChannelHandlerContext ctx、FullHttpResponse msg、List out)引发异常{
out.add(msg.status().code()+“-”+msg.status().reasonPhrase());
}
}
我想把我的手放在添加到
out
列表中的字符串上

在发送请求时,我添加了如下代码

ch.writeAndFlush(request).addListener(f->logger.info(“get value{}”,f.get());
而且

ch.closeFuture().addListener(f->logger.info(“get value{}”,f.get());
他们都给了我一个
null


如何获取最后一个ChannelInboundHandler的结果?我对未来很满意,但我似乎找不到正确的未来。

您是否可以在实现
ChannelInboundHandler
的管道末尾添加另一个处理程序,并在
channelRead
方法中获取消息?这些
out
值是用于管道的。相反,我认为您需要在
Channel
ctx.Channel().attr(…)
)中设置一个属性,然后在侦听器中检索它(
ch.attr(…)
)。@SeanBright-感谢您的响应。我在一个方法中创建管道,在另一个方法中调用连接,因此两者之间没有直接的联系。@SotiriosDelimanolis-听起来是个好主意,谢谢!属性似乎是“通道本地”的,所以使用它们似乎没有什么坏处。你可以写下这个作为答案