我有一个关于 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 的方式。
长风秋雁
相关分类