Spring Webflux - отправляет поток данных в конечную точку - PullRequest
0 голосов
/ 28 февраля 2019

У меня вопрос по поводу 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 полностью читает издатель, а затем отправляет данные целиком, а не передает их по очереди.Могу ли я что-нибудь сделать, используя этот клиент или любой другой?Я не хочу идти по пути веб-сокетов.

1 Ответ

0 голосов
/ 28 февраля 2019

Стандарт SSE не допускает POST.Невозможно указать метод даже в браузере API https://www.w3.org/TR/eventsource/

События на стороне сервера, поскольку состояния имен предназначены для доставки событий с сервера на клиент.

...