Java 如何在HttpDecompressor之前添加GlobalTrafficShapingHandler
我想在HttpDecompressor之前计算压缩大小 我尝试调用Java 如何在HttpDecompressor之前添加GlobalTrafficShapingHandler,java,reactor-netty,Java,Reactor Netty,我想在HttpDecompressor之前计算压缩大小 我尝试调用connection.addHandlerFirst,但不起作用 HttpClient.create() .mapConnect((连接,引导)->connection.map( 康涅狄格州->{ conn.addHandlerFirst(新ChannelInboundHandlerAdapter(){ @凌驾 public void channelRead(ChannelHandlerContext ctx,Object msg
connection.addHandlerFirst
,但不起作用
HttpClient.create()
.mapConnect((连接,引导)->connection.map(
康涅狄格州->{
conn.addHandlerFirst(新ChannelInboundHandlerAdapter(){
@凌驾
public void channelRead(ChannelHandlerContext ctx,Object msg)引发异常{
if(HttpContent的消息实例){
System.out.println(“接收:+msg”);
}
超级通道读取(ctx、msg);
}
});
返回连接;
}
))
.压缩(真);
使用连接#addHandlerFirst
不会有帮助,因为处理程序将添加到反应器编解码器之后
您可以将此处理程序直接添加到Netty管道,如下所示:
HttpClient.create()
.mapConnect((connection, bootstrap) -> connection.map(
conn -> {
conn.channel().pipeline().addBefore(NettyPipeline.HttpDecompressor, "myhandler",new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
});
return conn;
}
))
.compress(true);
HttpClient.create()
.doOnResponse((res, conn) ->
conn.channel().pipeline().addBefore(NettyPipeline.HttpDecompressor, "myhandler",new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
}))
.doAfterResponse((res, conn) ->
conn.channel().pipeline().remove("myhandler"))
.compress(true)
但是,您应该记住,一旦您将其直接添加到管道中,如果您使用连接池,该处理程序也将保留在下一个请求中(与连接#addHandlerFirst
不同)。因此,如果您只需要在特定请求中使用它,那么您应该在收到响应后将其删除。
大概是这样的:
HttpClient.create()
.mapConnect((connection, bootstrap) -> connection.map(
conn -> {
conn.channel().pipeline().addBefore(NettyPipeline.HttpDecompressor, "myhandler",new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
});
return conn;
}
))
.compress(true);
HttpClient.create()
.doOnResponse((res, conn) ->
conn.channel().pipeline().addBefore(NettyPipeline.HttpDecompressor, "myhandler",new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
System.out.println("received:" + msg);
}
super.channelRead(ctx, msg);
}
}))
.doAfterResponse((res, conn) ->
conn.channel().pipeline().remove("myhandler"))
.compress(true)