我想发送一些请求并接收高频响应。
我的代码如下:
Flux.fromIterable(params)
.delayElements(Duration.ofMillis(8))
.subscribe(
param -> {
webClient
.get()
.uri(prefix.concat(Utils.urlEncoder(param)))
.header("K1", "V1"))
.exchange()
.subscribe(clientResponse -> {
log.info("");
});
}
);
代码运行良好且频率很高。但是当我尝试更改delayElements
方法时
的值(使用 Duration.ofMillis(4)),我发现了一些例外情况。
ERROR [reactor-http-nio-2] ContextHandler --- Error cannot be forwarded to user-facing Mono
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.io.IOException: Connection closed prematurely
Caused by: java.io.IOException: Connection closed prematurely
代码仍然可以运行,但是它生成了一些异常。
此后,我将该值减小为 Duration.ofMillis(0)。该代码几乎无法运行。我的控制台中充满了异常。
Caused by: java.net.SocketException: Too many open files in system
我可以设置代码的吞吐量吗? 会更好吗?
8毫秒就足够了,但是如果我可以增加频率,那就太好了!谢谢!
答案 0 :(得分:1)
当您获得java.net.SocketException: Too many open files in system
时,表明您已达到文件描述符数量的限制。
尝试一下:
https://unix.stackexchange.com/questions/84227/limits-on-the-number-of-file-descriptors
答案 1 :(得分:1)
在这种情况下,可能会发生几件事:
通常,您应该使用 id time
0 1 00:04:20
2 2 00:11:21
3 2 03:21:32
限制并发呼叫的数量。 limitRate
只是引入了人为的延迟,但没有考虑网络延迟或服务器变慢。
您可以尝试:
delayElements