程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Spring 5 WebFlux WebClient中设置超时大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在Spring 5 WebFlux WebClient中设置超时?

开发过程中遇到如何在Spring 5 WebFlux WebClient中设置超时的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在Spring 5 WebFlux WebClient中设置超时的解决方法建议,希望对你解决如何在Spring 5 WebFlux WebClient中设置超时有所启发或帮助;

WebFlux WebClIEnt不使用Apache Commons http ClIEnt。然你可能可以通过custom实现一个解决方案ClIEnthttpConnector。现有ReactorClIEnthttpConnector基于Netty。因此,使用Netty选项来配置客户端,例如:

ReactorClIEnthttpConnector connector =
            new ReactorClIEnthttpConnector(options ->
                    options.option(ChAnnelOption.so_TIMEOUT, this.applicationConfig.gethttpClIEntConnectTimeout()));

要么

.onChAnnelinit(chAnnel -> chAnnel.config().setConnectTimeoutMillis(this.applicationConfig.gethttpClIEntConnectTimeout()))

更新

我们也可以使用ReadTimeoutHandler:

.onChAnnelinit(chAnnel -> 
        chAnnel.pipeline()
           .addLast(new ReadTimeoutHandler(this.applicationConfig.gethttpClIEntConnectTimeout())))

要设置读取和连接超时,我使用下面的方法,因为SO_TIMEOUT选项不适用于使用NIO的通道(并发出警告UnkNown chAnnel option 'SO_TIMEOUT' for chAnnel '[ID: 0xa716fcb2]'

ReactorClIEnthttpConnector connector = new ReactorClIEnthttpConnector(
          options -> options.option(ChAnnelOption.CONNECT_TIMEOUT_MILliS, 2000)
                            .compression(true)
                            .afterNettyContexTinit(ctx -> {
                                ctx.addHandlerLast(new ReadTimeoutHandler(5000, TimeUnit.MILliSECONDS));
                            }));
return WebClIEnt.builder()
                .clIEntConnector(connector)
                .build();

解决方法

我正在尝试在WebClient上设置超时,这是当前代码:

SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();

ClienthttpConnector httpConnector = new ReactorClienthttpConnector(opt -> {
    opt.sslContext(sslContext);
    httpClientOptions option = httpClientOptions.builder().build();
    opt.from(option);
});
return WebClient.builder().clientConnector(httpConnector).defaultHeader("Authorization",xxxX)
                .baseUrl(this.opusConfig.getBaseURL()).build();

我需要添加超时和池策略,我在想这样的事情:

PoolinghttpClientConnectionManager cm = new PoolinghttpClientConnectionManager();
cm.setMax@R_882_10586@l(this.applicationConfig.gethttpClientMaxPoolSize());
cm.setDefaultMaxPerRoute(this.applicationConfig.gethttpClientMaxPoolSize());
cm.closEIDleConnections(this.applicationConfig.getServerIdleTimeout(),TimeUnit.MILLISECONDS);

requestConfig requestConfig = requestConfig.custom().setSocketTimeout(this.applicationConfig.gethttpClientSocketTimeout())
        .setConnectTimeout(this.applicationConfig.gethttpClientConnectTimeout())
        .setConnectionrequestTimeout(this.applicationConfig.gethttpClientrequestTimeout()).build();

CloseablehttpClient httpClient = httpClients.custom().setDefaultrequestConfig(requestConfig).setConnectionManager(cm).build();

但是我不知道如何在我的webclient中设置httpClient

大佬总结

以上是大佬教程为你收集整理的如何在Spring 5 WebFlux WebClient中设置超时全部内容,希望文章能够帮你解决如何在Spring 5 WebFlux WebClient中设置超时所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。