限制Publisher中的预取

时间:2019-07-31 19:31:54

标签: java performance reactive-programming project-reactor

我想创建一个Flux,其中的元素按需生成且预取次数有限。

我尝试了以下操作,但由于generateElements变得很大(1011),因此该代码似乎无法处理反压力:

AtomicInteger generateElements = new AtomicInteger(0);
Flux<Integer> source = Flux
    .create(emitter -> {
        while (true)
            emitter.next(generateElements.getAndIncrement());
        })
    .subsribeOn(Schedulers.elastic())
    .limitRate(1);

source.take(4).subsribe(System.out::println);
assertThat(generateElements.get()).isEqualTo(5);

如何使Flux只能进行一次预取?

1 个答案:

答案 0 :(得分:2)

您可以使用Flux.generate,它在定义单个物料发射的地方应该是可调用的:

curl http://www.example.com --resolve www.example.com:80:127.0.0.1