Java 等待订阅服务器订阅的给定(可重置)时间

Java 等待订阅服务器订阅的给定(可重置)时间,java,project-reactor,Java,Project Reactor,在reactor中,有一种方法可以等待特定数量的订阅者,只有在这种情况下发布者才应该开始发出消息 我想实现一个稍微不同的场景: 订户订阅 publisher正在等待另一个订阅 订阅时间少于预期时间t 计时器重置,发布服务器继续等待另一个订阅服务器 在给定时间t内没有订阅 出版商开始对其进行宣传 如果等待周期持续的时间超过时间t2,则publisher将开始发射 怎么做 没有“烘焙”操作符可以做到这一点,但您应该能够使用标准的发布连接周期,通过计划任务和AtomicInteger模拟这一点: 谢谢

在reactor中,有一种方法可以等待特定数量的订阅者,只有在这种情况下发布者才应该开始发出消息

我想实现一个稍微不同的场景:

订户订阅 publisher正在等待另一个订阅 订阅时间少于预期时间t 计时器重置,发布服务器继续等待另一个订阅服务器 在给定时间t内没有订阅 出版商开始对其进行宣传 如果等待周期持续的时间超过时间t2,则publisher将开始发射


怎么做

没有“烘焙”操作符可以做到这一点,但您应该能够使用标准的发布连接周期,通过计划任务和AtomicInteger模拟这一点:


谢谢工作起来很有魅力。我有一个相关的问题。也许你也知道答案:
@Test
public void deferredConnect() throws InterruptedException {
    ConnectableFlux<Integer> connectableFlux = Flux.range(1, 10)
        .publish();
    AtomicInteger subCount = new AtomicInteger();

    Flux<Integer> deferredConnect = connectableFlux
        .doOnSubscribe(sub -> {
            int current = subCount.incrementAndGet();
            Schedulers.parallel().schedule(() -> {
                if (subCount.compareAndSet(current, -1)) {
                    connectableFlux.connect();
                }
            }, 1, TimeUnit.SECONDS);
        });

    deferredConnect.subscribe(v -> System.out.println("1: " + v));
    Thread.sleep(500);
    deferredConnect.subscribe(v -> System.out.println("2: " + v));
    Thread.sleep(400);
    deferredConnect.subscribe(v -> System.out.println("3: " + v));
    Thread.sleep(200);
    assertThat(subCount).hasNonNegativeValue();
    Thread.sleep(800);
    assertThat(subCount).hasNegativeValue();
}