1

我正在尝试测试每个元素延迟 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 个购物车?

4

1 回答 1

0

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

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

正如预期的那样,它一次生成一个元素,延迟一秒:

微航海 gif

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

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

于 2021-03-06T22:53:55.160 回答