我对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会完全读取发布者,然后将其作为一个整体发送,而不是逐流传输。 使用此客户端或任何其他客户端,我可以做些什么吗?我不想走网络套接字的方式。
答案 0 :(得分:1)
SSE标准不允许POST。即使在浏览器API https://www.w3.org/TR/eventsource/
中也无法指定方法服务器端事件作为名称状态旨在用于将事件从服务器传递到客户端。