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