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

Spring Webflux-向endpoint发送数据流

尹兴生
2023-03-14

我有一个关于Spring WebFlux的问题。我想创建一个使用内容类型text/event-stream的反应endpoint。不是生产而是消费。我们的一个服务需要向另一个服务发送大量的小对象,我们认为这样流式传输可能是一个很好的解决方案。

@PostMapping(value = "/consumeStream", consumes = MediaType.TEXT_EVENT_STREAM_VALUE)
public Mono<Void> serve(@RequestBody Flux<String> data) {
    return data.doOnNext(s -> System.out.println("MessageReceived")).then();
}
WebClient.builder().baseUrl("http://localhost:8080")
            .clientConnector(new ReactorClientHttpConnector())
            .build()
            .post()
            .uri("/test/serve")
            .contentType(MediaType.TEXT_EVENT_STREAM)
            .body(BodyInserters.fromPublisher(flux, String.class))
            .exchange()
            .block();

流量是每1秒产生一个值的流。我遇到的问题是,WebClient完全读取发布服务器,然后将数据作为一个整体发送,而不是一个接一个地流式传输。我能用这个客户机或任何其他客户机做些什么吗?我不想走网络插座的方式。

共有1个答案

萧亦
2023-03-14

SSE标准不允许POST。即使在浏览器API https://www.w3.org/tr/eventsource/中也无法指定方法

作为名称状态的服务器端事件是为将事件从服务器传递到客户端而设计的。

 类似资料:
  • 我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef

  • 有史以来第一次使用PS,有史以来第一次一般的脚本! 我在主机上本地存储了一个 wsdl,它指向本地主机终结点。这是必要的,因为远程服务器不为 wsdl 提供服务。但是,它们是这些 SOAP 请求的有效终结点。 我的网络中有多个endpoint,我想在引用静态wsdl的同时向每个endpoint发送New-WebServiceProxy请求。是否有办法使用本地wsdl,但指定目标endpoint覆盖

  • 我试图将数据发送到我的数据库,当单击我的注册按钮而不填写注册表单上的任何字段时,它会显示“字段为空”消息,但当我填写并单击注册按钮时,什么也没有发生。这是应该发送数据的代码 我在AppConfig.java中定义了我的URL_REGISTER

  • 我需要将一些数据从 Angular 传递到 Node.js 服务器。这是我的角度帖子列表组件:从“@angular/核心”导入 { 组件,OnInit };从 “@angular/common/http” 导入 { HttpClient }; 我的node.js服务器: 我想安慰一下。记录数据,但什么都没有发生。

  • 但是,下面的代码将数据发送到打印机,当数据到达打印机队列时,它返回时带有我认为可以通过指定风味来克服这个问题,但事实并非如此