Ваша ошибка здесь:
flux.subscribe({println(it)})
Вы подписаны на Flux
и используете его непосредственно в методе.Когда Flux
достигает HTTP-контейнера Reactor Netty, уже нечего потреблять.
Если вы действительно хотите println()
каждый элемент, рассмотрите возможность использования doOnNext()
вместо этого и действительно оставьте это subscribe()
в контейнер.
Кроме того, вы должны действительно следовать правилам событий на стороне сервера:
Синтаксис потока событий на стороне сервера прост.Установите заголовок «Content-Type» в «text / event-stream».
https://www.w3schools.com/html/html5_serversentevents.asp
Итак, когда я делаю это:
@GetMapping("/load", produces = [MediaType.TEXT_EVENT_STREAM_VALUE])
fun load() =
Flux.just("foo", "bar", "baz")
.doOnNext({ println(it) })
Я начинаю получать события на стороне сервера в моем подключенном клиенте:
C:\tmp\so50823339>curl -X GET http://localhost:8080/load
data:foo
data:bar
data:baz
C:\tmp\so50823339>
, где одновременно я получаю логи на сервере для упомянутых doOnNext()
:
2018-06-12 17:33:37.453 INFO 6800 --- [ main] c.e.s.s.So50823339ApplicationKt : Started So50823339ApplicationKt in 3.112 seconds (JVM running for 3.924)
foo
bar
baz