Spring Web Flux Web 客户端未一一接收值

Spring Web Flux web client doesn't receive value one by one

@GetMapping("/test")
fun fluxTest(): Flux<Int> {
        return Flux.create {em ->
            Thread{
                (0..10).forEach{
                    em.next(it)
                    Thread.sleep(1000)
                }
                em.complete()
            }.run()
        }
    }

所以上面的代码是一个 Spring MVC 控制器方法,以 1 秒的间隔发出 0 ~ 10 个数字。

这是我的客户端代码。

val client = WebClient.builder().baseUrl("http://localhost:8083/api/v1")
    .build()
val disposable = client.get()
    .uri("/test")
    .retrieve()
    .bodyToFlux(Int::class.java)
    .subscribe ({
        System.out.println("Value arrived : $it")
    }, {err ->
        err.printStackTrace()
    })

问题是客户端程序一次打印0~10,而不是1秒一个一个打印。

所以它不会一个一个地打印来自服务器的值,而是在流完成时打印整个接收到的值。

谁能帮我解决这个问题?

谢谢

看起来你应该启用服务器发送的事件,简单的方法只需将生产者添加到 enpoint,如下所示:

@GetMapping(path = "/test", produces=MediaType.TEXT_EVENT_STREAM_VALUE)