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


慕丝7291255
浏览 170回答 1
1回答

长风秋雁

SSE 标准不允许 POST。即使在浏览器 API https://www.w3.org/TR/eventsource/中也无法指定方法作为名称状态的服务器端事件旨在将事件从服务器传递到客户端。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java