【问题标题】:Spring Web Flux web client doesn't receive value one by oneSpring Web Flux web 客户端没有一一接收到值
【发布时间】:2018-12-05 00:02:42
【问题描述】:
@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 秒一个一个打印出来。

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

谁能帮我解决这个问题?

谢谢

【问题讨论】:

    标签: spring-webflux


    【解决方案1】:

    看起来你应该启用服务器发送事件,简单的方法就是像这样将生产者添加到 enpoint:

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

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多