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

Spring 5 Web反应式-Web客户端-在响应流上使用flatmap()

冯通
2023-03-14

例如,在本文中,我试图理解为什么在响应流中使用flatmap()(直接从引用中粘贴副本)

final ClientRequest request = ClientRequest.GET(url)
        .accept(MediaType.TEXT_EVENT_STREAM).build();
Flux<Alert> alerts = webClient.exchange(request)
        .flatMap(response -> response.bodyToFlux(Alert.class));

AFAIK,应用于流的平面图会为流中的每个输入值产生任意数量的值(0... n)。所以一个平面图需要一个产生流的函数。

通量发射0个或多个项目,然后可选地完成或偏离。

那么,响应流上到底发生了什么?这是接收响应流并发出0个或更多类警报对象的函数吗?因此,如果我们订阅警报,我们可以通过web客户端以反应式的方式获取警报。有人能澄清一下我是否正确吗?


共有1个答案

郭知
2023-03-14

是的,没错。接收报头是第一个异步阶段,此时您将得到一个响应。然后使用flatMap异步检索主体。所说的主体是一个通量,因为在某些情况下,您可以获得多个未经授权的对象(例如SSE)。在这里,您可能只会收到一个警报

 类似资料:
  • 我试图使用Spring反应式WebClient将文件上传到Spring控制器。控制器非常简单,看起来像这样: 当我使用这个控制器与cURL一切正常 multipartFile转到正确的参数,其他参数进入Map。 当我尝试从WebClient做同样的事情时,我被卡住了。我的代码如下所示: 这会导致400错误 有人知道如何解决这个问题吗?

  • 我试图测试Spring反应式Webclient的默认超时。为此,我创建了一个需要 10 小时才能返回响应的 rest endpoint。 我使用spring-reactive Webclient创建了一个rest客户端。但我看到,springReactiveWebclient一直在等待10个小时。 spring reactive Webclient没有任何默认超时吗?

  • 我正在spring应用程序中使用web客户端 我在执行相同操作时面临内存泄漏问题 我正在使用下面的代码获取来自服务的非2xx响应的响应体: 我的问题是,如果我在responseMono上使用dispose方法,处理过程需要很长的时间,而没有它,我会面临内存泄漏问题。我在这里做错什么了吗?

  • 但是,我不确定为什么它不输出get请求的值?它实际上并不触发endpoint。

  • 如何将响应从反应型HTTP客户机流式传输到控制器,而不在任何时候将整个响应主体放在应用程序内存中? 几乎所有project reactor客户机的示例都返回。据我所知,反应流是关于流,而不是加载它,然后发送响应。 是否可以返回,以便在不需要使用大量RAM内存来存储中间结果的情况下,将大文件从某个外部服务传输到应用程序客户机?

  • 只是想知道有没有办法得到spring Web-Flux的web客户端的响应时间?