简体   繁体   English

无法在 reactor-netty 版本 0.9.10 上设置 WriteTimeout

[英]Unable to set WriteTimeout on reactor-netty version 0.9.10

I have written a Reactive API using Spring WebFlux version 2.3.0.RELEASE having reactor-netty version 0.9.10 .我已经使用 Spring WebFlux 版本2.3.0.RELEASEreactor-netty 版本 0.9.10 编写了反应式 API As part of the API's SLA, I want to timeout the request if the Server takes more than the stipulated configured WriteTimeout.作为 API 的 SLA 的一部分,如果服务器占用的时间超过规定的配置 WriteTimeout,我想使请求超时。

Sharing the code snipped below where I have implemented a customizer for NettyReactiveWebServerFactory.分享下面我为 NettyReactiveWebServerFactory 实现定制器的代码。

@Bean
  public WebServerFactoryCustomizer serverFactoryCustomizer() {
    return new NettyTimeoutCustomizer();
  }

  class NettyTimeoutCustomizer implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {

    @Override
    public void customize(NettyReactiveWebServerFactory factory) {
      int connectionTimeout = 1000;
      int writeTimeout = 1;
          factory.addServerCustomizers(server -> server.tcpConfiguration(tcp ->
              tcp.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
                  .doOnConnection(connection ->
                      connection.addHandlerLast(new WriteTimeoutHandler(writeTimeout)))));
    }
  }

In spite of the Customizer, the WriteTimeout is Not Working for the API.尽管有定制器,WriteTimeout 对 API 不起作用。

Instead of defining a WebServerFactoryCustomizer bean, create a bean of NettyReactiveWebServerFactory to override Spring's auto-configuration.与其定义WebServerFactoryCustomizer bean,不如创建一个NettyReactiveWebServerFactory的 bean 来覆盖 Spring 的自动配置。

  @Bean
  public NettyReactiveWebServerFactory nettyReactiveWebServerFactory() {
    NettyReactiveWebServerFactory webServerFactory = new NettyReactiveWebServerFactory();
    webServerFactory.addServerCustomizers(new MyCustomizer());
    return webServerFactory;
  }

Now the MyCustomizer will look something like this:现在MyCustomizer看起来像这样:

public class MyCustomizer implements NettyServerCustomizer {

  @Override
  public HttpServer apply(HttpServer httpServer) {
    return httpServer.tcpConfiguration(tcpServer -> tcpServer.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000)
        .bootstrap(serverBootstrap -> serverBootstrap.childHandler(new ChannelInitializer<Channel>() {
          @Override
          protected void initChannel(Channel channel) throws Exception {
            channel.pipeline().addLast("writeTimeoutHandler", new WriteTimeoutHandler(1));
          }
        }))
    );
  }
}

This is the way suggested in the official API doc这是官方 API 文档中建议的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何处理 reactor-netty 在 spring-webflux 中终止请求? - How to handle reactor-netty terminating a request in spring-webflux? 当服务器提前响应时,Spring WebClient / Reactor-netty 坏了? - Spring WebClient / Reactor-netty broken when a server responds early? 如何在 reactor.netty 服务器的 Spring Webflux 中监控仪表 - How to monitor meters in Spring Webflux for a reactor-netty server 在 reactor.netty WebSocketSession 中发送更多数据之前如何确保前面的 session.send() 完成 - How to make sure the previous session.send() is complete before sending more data in reactor-netty WebSocketSession 使用 spring HATEOAS 和 spring webflux 功能 Web 框架 (reactor.netty) - Using spring HATEOAS with spring webflux Functional Web Framework (reactor-netty) 带有 ReactorClientHttpConnector 的 Netty:如何在不使用已弃用的 tcpConfiguration 的情况下设置 readTimeout、writeTimeout 和 connectTimeout - Netty with ReactorClientHttpConnector: How to set readTimeout, writeTimeout and connectTimeout without using deprecated tcpConfiguration 如何在 Reactor Netty HTTP 客户端中设置 TCP Keepalive? - How to set TCP Keepalive in Reactor Netty HTTP client? Spring Webflux 应用程序,无法获取 reactor.netty.http.client* 指标和 reactor.netty.connection.provider* 指标 - Spring Webflux application, unable to get reactor.netty.http.client* metrics and reactor.netty.connection.provider* metrics reactor.netty.ioWorkerCount 不同的默认计数 - reactor.netty.ioWorkerCount different default count Spring 5 Reactor Netty日志垃圾邮件(太冗长) - Spring 5 Reactor Netty log spam (too verbose)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM