作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 AWS 负载均衡器后面运行 spring cloud gateway(我理解它是在 Spring Webflux 上构建的),我收到间歇性 502 错误。经过调查,问题似乎与负载均衡器和我的节点之间的连接超时有关。从一些调查来看,底层 netty 服务器的默认超时时间为 10 秒。我使用以下命令确定了这一点...
time nc -vv 10.10.xx.xxx 5100
Connection to 10.10.xx.xxx 5100 port [tcp/*] succeeded!
real 0m10.009s
user 0m0.000s
sys 0m0.000s
server:
connection-timeout: 75000
server:
connection-timeout: 75s
time nc -vv 10.10.xx.xxx 5100
Connection to 10.10.xx.xxx 5100 port [tcp/*] succeeded!
real 0m10.009s
user 0m0.000s
sys 0m0.000s
最佳答案
server.connection-timeout
Netty 服务器不支持配置键(目前),我提出了 spring-boot#15368解决这个问题。
连接超时大约是我们应该等待建立连接的最长时间。如果您想自定义读/写超时,那么这些是不同的选项。您可以添加 ReadTimeoutHandler
如果服务器在配置的持续时间内没有从客户端接收数据,则关闭连接。与 WriteTimeoutHandler
相同,但这次是关于服务器向客户端写入数据。
这是一个完整的例子:
@Configuration
public class ServerConfig {
@Bean
public WebServerFactoryCustomizer serverFactoryCustomizer() {
return new NettyTimeoutCustomizer();
}
class NettyTimeoutCustomizer implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {
@Override
public void customize(NettyReactiveWebServerFactory factory) {
int connectionTimeout = //...;
int writetimeout = //...;
factory.addServerCustomizers(server -> server.tcpConfiguration(tcp ->
tcp.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
.doOnConnection(connection ->
connection.addHandlerLast(new WriteTimeoutHandler(writetimeout)))));
}
}
}
@RestController
public class TestController {
@GetMapping(path = "/", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> textStream() {
return Flux.interval(Duration.ofSeconds(5)).map(String::valueOf);
}
}
http localhost:8080/ --stream --timeout 60
.
time nc -vv 192.168.0.28 8080
192.168.0.28 8080 (http-alt) open
^CExiting.
Total received bytes: 0
Total sent bytes: 0
nc -vv 192.168.0.28 8080 0.01s user 0.00s system 0% cpu 2:36.53 total
关于spring-webflux - 如何为 Spring WebFlux 配置 netty 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53587611/
我是一名优秀的程序员,十分优秀!