从Spring 5开始WebClient使用Reactive HTTP Client 时有关超时和重试的说明。
验证时的库版本如下。
特别要注意的是,如果Reactor Netty版本发生更改,代码示例可能无法编译。
因为测试案例为超时,所以以下代码192.168.10.110是不存在的计算机/容器的IP地址。
执行此操作时,将输出以下日志。
我订阅了HTTP请求,但发生了连接超时。HTTP请求后30秒发生超时,并onError调用Reactive Streams 方法。发生的异常
可能默认的连接超时值是30秒。
由于30秒很长,我想将超时设置为3秒。这里,timeout(Duration)使用Reactor静态类,使用如下。
执行此操作时,将输出以下日志。
订阅后3秒生成超时,并onError调用该方法。发生的异常
需要打印出HTTP / TCP的建立日志。需要设置WebClient内部使用HttpClient,请执行以下操作。
执行时输出以下日志。
据了解,在关闭HTTP之后,CLOSE进行了30秒。
执行时输出以下日志。
在CONNECT之后,可以看到处理在订阅后3秒被中断而不等待CLOSE。
接下来,在Netty层中设置Connection Timeout。
以下代码设置连接超时值为500 ms。
执行时输出以下日志。
在HTTP CONNECT之后,在500毫秒后关闭,可以看出 异常已经发生了。操作员未被调用,因为它在3秒之前错误地结束timeout。
localhost:8088更改代码的连接目标。这里的假设是本地机器没有端口8088。
执行时输出以下日志。
retryWhentimeout因为外面有一个操作员,无论怎么重试都会在3秒内中断。
执行时输出以下日志。
可以看出该过程如下。
重试两次后, 异常已经发生了。经过的时间约为1.2秒且小于超时时间。
接下来,尝试连接超时案例。在这种情况下,我没有故意设置Netty的连接超时。
执行时输出以下日志。
可以看出该过程如下。
这timeout与第一次引入操作员的结果相同。应注意,即使包括重试控制,也可获得相同的结果。
假设在Connect失败后执行重试,timeout但是处理被中断而不重试,因为在第一个Connect中超出了高级操作员时间。
现在retryWhen并timeout试图改变的顺序。 这里顺序很重要
执行时输出以下日志。
可以看出该过程如下。
timeout除了上述之外,retryWhen总共执行3次超时3秒,并且可以看出完成该过程大约需要10秒。
最后,恢复最后一个的顺序retryWhen并timeout重新设置Netty的连接超时设置。
执行时输出以下日志。
可以看出该过程如下。
也许我认为这个例子接近通常的超时设置。
不要设置Netty的连接超时,而是在之前和之后设置timeout运算符retryWhen
通过这样做可以实现相同的超时,但是在易于理解堆栈跟踪方面,前面的代码更容易理解。
为了使重试按预期工作,有必要了解内部和外部超时之间的差异。
在那之后,把断路器放在这之外是好的,但如果那次谈话是一个机会。
处理程序建立后CONECTION设定的Netty的TcpClient在doOnConnected可以被添加到该方法。
以下代码故意将Read Timeout设置为small,并访问需要一秒钟才能返回响应的服务。
执行时输出以下日志。
在Spring Boot的情况下,ClientHttpConnector如果进行了Bean定义,则会WebClient.Builer自动设置它。
https://github.com/spring-projects/spring-boot/blob/v2.1.1.RELEASE/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/function/client/ClientHttpConnectorAutoConfiguration.java
ReactorClientHttpConnector定义
WebClient你可以使用WebClient.Builder注入使用。
到此这篇druid连接池配置官方文档(druid连接池两种初始化)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/do-docker-k8s/27325.html