【发布时间】:2020-10-31 08:36:44
【问题描述】:
我正在尝试使用 Reactor Flux 一个一个地处理一个数字列表,例如 1 到 10,并且有一个 API /double 可以简单地将传入的 加倍Integer (1 -> 2, 4 -> 8...) ,但是这个API有性能问题,总是需要2秒才能响应结果。
当使用limitRate(1) 时,我期望的是 Reactor 会一个接一个地处理请求,如下所示:
2020-01-01 00:00:02 - 2
2020-01-01 00:00:04 - 4
2020-01-01 00:00:06 - 6
2020-01-01 00:00:08 - 8
2020-01-01 00:00:10 - 10
...
但实际上 Reactor 会同时触发所有请求:
2020-01-01 00:00:02 - 6
2020-01-01 00:00:02 - 10
2020-01-01 00:00:02 - 2
2020-01-01 00:00:02 - 4
2020-01-01 00:00:02 - 8
...
这里是代码
Flux.range(1, 10).limitRate(1)
.flatMap(i -> webClient.get().uri("http://localhost:10001/double?integer={int}", i).exchange()
.flatMap(resp -> resp.bodyToMono(Integer.class)))
.subscribe(System.out::println);
Thread.sleep(10000);
似乎limitRate 没有像我预期的那样工作,出了什么问题?有没有办法使用 Reactor 一个接一个地处理请求?提前致谢。
【问题讨论】: