Spring Реактивная обработка событий на стороне сервера

Как получать потоковые данные через серверные события Content-Type: text/event-stream с помощью функций Spring Flux? Можно ли обрабатывать такие ответы с помощью WebClient?

Исходная конечная точка:

@GetMapping(path = "/", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<CurrencyStats> get() {
    return getStream();
}

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

WebClient webClient = WebClient.create("http://example.com");
        return webClient
                .get()
                .uri("/sse")
                .accept(MediaType.TEXT_EVENT_STREAM)
                .retrieve()
                .bodyToFlux(String.class).doOnNext(
                        string -> {
                            // print that string
                        }
                );

person Aleksey Kozel    schedule 19.11.2017    source источник


Ответы (1)


Вот что мне было нужно:

WebClient webClient = WebClient.create(url);
        Flux<Map> alerts = webClient.get()
                .uri("/sse")
                .accept(MediaType.TEXT_EVENT_STREAM)
                .retrieve()
                .bodyToFlux(Map.class)
                .checkpoint().doOnNext(
                        s -> {
                            logger.log(Level.ERROR, s);
                        }
                );
person Aleksey Kozel    schedule 19.11.2017