Micronaut Reactive Streams:未维持排放率

问题描述

我正在尝试测试每个元素延迟为 1000 毫秒的 Flux 流式传输。

@Get(value = "/carts/reactive",produces = MediaType.APPLICATION_JSON_STREAM)
public Flux<Cart> getCartsReactive() {
     return Flux.range(1,10)
            .map(integer -> Cart.builder().name("cart" + integer).build())
            .delayElements(Duration.ofMillis(1000))
            .doOnNext(cart -> log.info("Returning Flux of cart: " +cart));
}

当我点击服务时,我没有得到响应 10 秒并获得响应的博客

curl http://localhost:7070/carts/reactive

{"name":"cart1"}{"name":"cart2"}{"name":"cart3"}{"name":"cart4"}{"name":"cart5"}{"name":"cart6"}{"name":"cart7"}{"name":"cart8"}{"name":"cart9"}{"name":"cart10"}

这是一个错误吗?为什么它每秒不发出 1 个购物车?

解决方法

您编写的代码没有任何问题 - 这是一个使用 micronaut + reactor 的完整项目,在控制器中包含该代码:

https://github.com/berry120/micronaut-reactive-demo

它按预期一次生成一个元素,延迟一秒:

Micronaut gif

您可以将该项目与您自己的项目进行比较,以查看您可能缺少哪些阻止其正常工作的配置/代码。我完全没有对上述项目做任何特别的事情 - 这纯粹是从 Micronaut 初始化创建的,包括反应器附加组件。

请注意,您应该配置 micronaut-reactor 模块 (implementation("io.micronaut.reactor:micronaut-reactor")),而不仅仅是将 reactor 作为第三方依赖项包含在内,否则可能会导致问题。