当前位置: 首页 > 知识库问答 >
问题:

从WebClient流到Flux。阻止超时引发异常

羊毅庵
2023-03-14
        WebClient client = WebClient.builder().baseUrl(URL).build();

        List<Item> items = client
                .get()
                .retrieve()
                .bodyToFlux(Item.class)
                .limitRequest(10)
                .collectList()
                .block(Duration.ofSeconds(10));
java.lang.IllegalStateException: Timeout on blocking read for 10000 MILLISECONDS

如何使用WebClient读取长达x秒的流,然后返回检索到的项?

共有1个答案

暴英达
2023-03-14

我想检索元素,直到我收到10个元素,或者10秒钟过去。

听起来buffertimeout()正是您想要的。

将传入的值收集到多个列表缓冲区中,每次缓冲区达到最大大小或超过maxTime持续时间时,返回的流量都会发出这些值。

List<Item> items = client
        .get()
        .retrieve()
        .bodyToFlux(Item.class)
        .bufferTimeout(10, Duration.ofSeconds(10)) //first parameter is max number of elements, second is timeout
        .blockFirst();
 类似资料:
  • 我创建了一个返回无限流量的服务器和一个异步读取响应对象的客户机。我想让客户机退订通量并停止处理它。 当客户端取消订阅(使用Disposable.Dispose())时,在服务器端抛出2个异常(IOException和UnsupportedOperationException): 后接 2017-11-24 01:04:09.476错误83663---[ctor-http-nio-2]O.S.W.S

  • 这是一个windows表单应用程序,我在其中有一个特定的表单。在这个表单上,我显示了一些应该在后台异步发生的处理的进度。所有这些都很好,除了当我尝试处理后台处理中捕获的异常时…… 这是表单代码中调用Async函数的子函数,该函数位于包含所有后台处理代码的模块中: 这是它调用的异步函数,它位于一个单独的模块中: 这是由异步函数调用的常规sub: 当我使用我知道最终会在子B中生成错误的数据运行此代码时

  • 我有一种情况,我可以使用阻塞I/O库访问外部服务上的RESTendpoint,或者在这种情况下,我可以直接使用HttpClient(如WebClient)调用REST。现在,我想知道在包装对该库的调用和将其发布到弹性线程或使用WebClient访问endpoint之间是否存在性能差异。 如何准确地处理调用这两个选项。所以我们假设网络流量使用单线程来处理请求。然后,请求将由WebClient处理。这

  • 我在2个命名空间tenant1命名空间和tenant2命名空间中创建了2个租户(tenant1,tenant2) 每个租户都有db pod及其服务 如何隔离db pods/service,即如何限制pod/service从他的命名空间访问其他租户db pod? 我为每个租户使用了服务号,并应用了网络策略,以便隔离命名空间。 所以 我想限制grafana-app仅在他的命名空间中使用他的postgr

  • 我一直在试验项目反应器和反应流。我在使用使流在不同的线程上运行时遇到了一个问题。将我的代码放在主线程中,我需要主线程块,直到流完成,所以我做了这样的事情: 然后我注意到有一个方法执行阻塞。但是我不能同时使用订阅和块最后,因为它们不返回。 有什么优雅的方法可以做到这一点吗?

  • 问题内容: 如何从Java 8流/ lambda中抛出CHECKED异常? 换句话说,我想使代码像这样编译: 由于上面的方法,因此该代码无法编译。 请注意,我不想将已检查的异常包装在运行时异常中,而是将已包装的未检查的异常抛出。我想抛出被检查的异常本身,而又不添加丑陋的流。 问题答案: 该帮助程序类使你可以在Java流中使用任何已检查的异常,如下所示: 注意抛出异常,已被选中。流本身也会抛出,而不