Java 使用WebClient替换RestTemplate时应注意什么?

Java 使用WebClient替换RestTemplate时应注意什么?,java,spring,spring-boot,Java,Spring,Spring Boot,io.netty.channel.unix.Errors$NativeIoException:newSocketStream(..)失败:打开的文件太多 我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些如何实现这一点的想法 弹簧靴:2.3.1.1释放 @配置 公共类AppConfig{ @豆子 公共WebClient WebClient(WebClient.Builder)引发SSLException{ 最终SslContext SslContext= SslContextBuilder

io.netty.channel.unix.Errors$NativeIoException:newSocketStream(..)失败:打开的文件太多

我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些如何实现这一点的想法

弹簧靴:2.3.1.1释放

@配置
公共类AppConfig{
@豆子
公共WebClient WebClient(WebClient.Builder)引发SSLException{
最终SslContext SslContext=
SslContextBuilder.forClient().trustManager(不安全的TrustManagerFactory.INSTANCE).build();
HttpClient HttpClient=
HttpClient.create().secure(sslContextSpec->sslContextSpec.sslContext(sslContext));
返回builder.clientConnector(新的reactorclienthtpcconnector(httpClient)).build();
}
@豆子
公共RestTemplate RestTemplate(){
返回新的RestTemplate();
}
}
@RestController
@请求映射(“/test”)
公共类WebClient控制器{
私人最终网络客户网络客户;
私有最终RestTemplate RestTemplate;
公共WebClient控制器(WebClient WebClient、RestTemplate RestTemplate){
this.webClient=webClient;
this.restTemplate=restTemplate;
}
@GetMapping(“/webclient”)
公共单声道main(){
新的SimpleAsyncTaskExecutor()
.执行(
() -> {
对于(int i=0;i{

对于(int i=0;i哪里错了…Ehrm 1.为什么是执行者?2.您正在阻止,为什么?@M.Deinum衷心感谢您的回答,这只是一个示例,我正在学习,我不知道为什么使用这种方式是错误的。线程何时关闭?您没有创建那么多线程,但线程永远不会关闭。除非它们被收集。Wh你想达到什么目的?如果你想学习,那么就按照指南去做。你的问题是关于学习
WebClient
你链接到一个指南,解释它是如何工作的。你发布的代码与该指南没有关系。现在是替换
restemplate
。如果你想替换它,那么就替换它,但不要像这样编写代码你在这里做了,并试图学习它。指南解释了它是如何工作的,但不确定你的代码与它有什么关系。哪里错了…Ehrm 1.为什么是执行者?2.你在阻止,为什么?@M.Deinum真诚地感谢你的回答,这只是一个例子,我正在学习,我不知道为什么使用这种方式是错误的。线程何时关闭?你是不要创建那么多线程,但是线程永远不会关闭。除非它们被收集。你想实现什么?我告诉你,你想学习,然后按照指南去做。你的问题是关于学习
WebClient
你链接到一个说明它如何工作的指南。你发布的代码与该指南没有关系。现在它要替换了
RestTemplate
。如果要替换它,请替换它,但不要像这里那样编写代码并尝试学习它。指南解释了它的工作原理,但不确定您的代码与此有何关联。
...
Hello, Spring!65535
Hello, Spring!65536
...
Hello, Spring!65535
Hello, Spring!65536
...
Hello, Spring!65535
Hello, Spring!65536
Hello, Spring!10196
Hello, Spring!10197
Exception in thread "SimpleAsyncTaskExecutor-1" io.netty.channel.ChannelException: io.netty.channel.unix.Errors$NativeIoException: newSocketStream(..) failed: Too many open files
        at io.netty.channel.unix.Socket.newSocketStream0(Socket.java:421)
        at io.netty.channel.epoll.LinuxSocket.newSocketStream(LinuxSocket.java:319)
        at io.netty.channel.epoll.LinuxSocket.newSocketStream(LinuxSocket.java:323)
        at io.netty.channel.epoll.EpollSocketChannel.<init>(EpollSocketChannel.java:45)
        at reactor.netty.resources.DefaultLoopEpoll.getChannel(DefaultLoopEpoll.java:45)
        at reactor.netty.resources.LoopResources.onChannel(LoopResources.java:187)
        at reactor.netty.resources.LoopResources.onChannel(LoopResources.java:169)
        at reactor.netty.tcp.TcpResources.onChannel(TcpResources.java:215)
        at reactor.netty.http.client.HttpClientConnect$HttpTcpClient.connect(HttpClientConnect.java:141)
        at reactor.netty.tcp.TcpClientOperator.connect(TcpClientOperator.java:43)
        at reactor.netty.tcp.TcpClientOperator.connect(TcpClientOperator.java:43)
        at reactor.netty.tcp.TcpClientOperator.connect(TcpClientOperator.java:43)
        at reactor.netty.tcp.TcpClientOperator.connect(TcpClientOperator.java:43)
        at reactor.netty.tcp.TcpClient.connect(TcpClient.java:202)
        at reactor.netty.http.client.HttpClientFinalizer.connect(HttpClientFinalizer.java:77)
        at reactor.netty.http.client.HttpClientFinalizer.responseConnection(HttpClientFinalizer.java:94)
        at org.springframework.http.client.reactive.ReactorClientHttpConnector.connect(ReactorClientHttpConnector.java:111)
        at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.exchange(ExchangeFunctions.java:104)
        at org.springframework.web.reactive.function.client.DefaultWebClient$DefaultRequestBodyUriSpec.lambda$exchange$0(DefaultWebClient.java:338)
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4219)
        at reactor.core.publisher.Mono.block(Mono.java:1678)
        at com.example.demo.controller.WebClientTestController.lambda$main$0(WebClientTestController.java:38)
        at java.lang.Thread.run(Thread.java:748)
        Suppressed: java.lang.Exception: #block terminated with an error
                at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:99)
                at reactor.core.publisher.Mono.block(Mono.java:1679)
                ... 2 more
Caused by: io.netty.channel.unix.Errors$NativeIoException: newSocketStream(..) failed: Too many open files