问题描述
我正在尝试测试每个元素延迟为 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"}
解决方法
您编写的代码没有任何问题 - 这是一个使用 micronaut + reactor 的完整项目,在控制器中包含该代码:
https://github.com/berry120/micronaut-reactive-demo
它按预期一次生成一个元素,延迟一秒:
您可以将该项目与您自己的项目进行比较,以查看您可能缺少哪些阻止其正常工作的配置/代码。我完全没有对上述项目做任何特别的事情 - 这纯粹是从 Micronaut 初始化创建的,包括反应器附加组件。
请注意,您应该配置 micronaut-reactor 模块 (implementation("io.micronaut.reactor:micronaut-reactor")
),而不仅仅是将 reactor 作为第三方依赖项包含在内,否则可能会导致问题。