Spring Webflux-将数据流发送到端点

时间:2019-02-27 21:06:01

标签: java http streaming reactive-programming spring-webflux

我对Spring Webflux有疑问。我想创建一个使用内容类型文本/事件流的反应式端点。不生产而是消费。我们的一项服务需要将许多小对象发送到另一项,我们认为以这种方式流式传输它可能是一个很好的解决方案。

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

1 个答案:

答案 0 :(得分:1)

SSE标准不允许POST。即使在浏览器API https://www.w3.org/TR/eventsource/

中也无法指定方法

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