Spring Webflux - 发送数据流到端点

Spring Webflux - send data stream to endpoint

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

@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();
}

我正在尝试使用 Spring WebClient 建立到端点的连接并将数据流式传输到端点。例如使用代码:

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 完全读取发布者,然后将数据作为一个整体发送,而不是一个一个地流式传输。 使用此客户端或任何其他客户端,我可以做些什么吗?我不想走 websockets 的路。

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

作为名称状态的服务器端事件旨在将事件从服务器传递到客户端。