WebClient在我已经设置超时时间的情况下出现了TimeoutException。

huangapple 未分类评论42阅读模式
英文:

WebClient get issue TimeoutException while I've set the timeout

问题

	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:289) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:274) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:396) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.publisher.StrictSubscriber.onNext(StrictSubscriber.java:89) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:117) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:834) [?:?]

使用的依赖:

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webflux</artifactId>
      <version>5.2.4.RELEASE</version>
</dependency>
<dependency>
      <groupId>io.projectreactor.netty</groupId>
      <artifactId>reactor-netty</artifactId>
      <version>0.9.5.RELEASE</version>
</dependency>

这是我的代码:

HttpClient httpClient = HttpClient.create(ConnectionProvider.builder("adfa").maxConnections(10000).build());

getWebClient = WebClient.builder()
           .clientConnector(new ReactorClientHttpConnector(httpClient))
           .codecs(clientCodecConfigurer -> { 
                lientCodecConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(
                        objectMapper, new MimeType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8)));
            })
            .build();```

<details>
<summary>英文:</summary>

    java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in &#39;source(MonoDefer)&#39; (and no fallback has been configured)
    	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:289) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:274) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:396) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.publisher.StrictSubscriber.onNext(StrictSubscriber.java:89) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:73) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:117) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) [reactor-core-3.3.3.RELEASE.jar:3.3.3.RELEASE]
    	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) [?:?]
    	at java.util.concurrent.FutureTask.run(FutureTask.java) [?:?]
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    	at java.lang.Thread.run(Thread.java:834) [?:?]

Use dependency:

    &lt;dependency&gt;
          &lt;groupId&gt;org.springframework&lt;/groupId&gt;
          &lt;artifactId&gt;spring-webflux&lt;/artifactId&gt;
          &lt;version&gt;5.2.4.RELEASE&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
          &lt;groupId&gt;io.projectreactor.netty&lt;/groupId&gt;
          &lt;artifactId&gt;reactor-netty&lt;/artifactId&gt;
          &lt;version&gt;0.9.5.RELEASE&lt;/version&gt;
    &lt;/dependency&gt;

This is my code:

```HttpClient httpClient = HttpClient.create(ConnectionProvider.builder(&quot;adfa&quot;).maxConnections(10000).build());

getWebClient = WebClient.builder()
               .clientConnector(new ReactorClientHttpConnector(httpClient))
               .codecs(clientCodecConfigurer -&gt; { 
                    lientCodecConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(
                            objectMapper, new MimeType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8)));
                })
                .build();```

</details>


# 答案1
**得分**: 0

```getWebClient = WebClient.builder().exchangeStrategies(ExchangeStrategies.builder().codecs(codecConfigurer -> codecConfigurer.defaultCodecs().maxInMemorySize(-1)).build()).clientConnector(new ReactorClientHttpConnector(HttpClient.create(ConnectionProvider.newConnection()).compress(true).keepAlive(true))).codecs(clientCodecConfigurer -> clientCodecConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper, new MimeType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8)))).build();
英文:

Please try with this

 WebClient.builder().exchangeStrategies(ExchangeStrategies
             .builder()
                .codecs(codecConfigurer -&gt; codecConfigurer.defaultCodecs().maxInMemorySize(-1)).build())
                .clientConnector(new ReactorClientHttpConnector(HttpClient.create(ConnectionProvider.newConnection()).compress(true).keepAlive(true)))
                .codecs(clientCodecConfigurer -&gt; clientCodecConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(
                        objectMapper, new MimeType(MediaType.APPLICATION_JSON, StandardCharsets.UTF_8))))
                .build();

</details>



huangapple
  • 本文由 发表于 2020年7月24日 17:31:04
  • 转载请务必保留本文链接:https://java.coder-hub.com/63070803.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定