我正在尝试使用Project Reactor创建一个示例项目,并尝试以下方案:
在Java 9中,this is possible使用类SubmissionPublisher
:
“缓冲允许生产者和消费者在短时间内进行操作 不同的费率。每个订户使用独立的缓冲区。缓冲区 在第一次使用时创建并根据需要扩展到给定的 最大“。
我的例子基于这个示例代码,我试图应用上述条件:
import java.time.Duration;
import reactor.core.publisher.ConnectableFlux;
import reactor.core.publisher.Flux;
import reactor.core.scheduler.Schedulers;
public class FluxTest {
public static void main(String[] args) {
final ConnectableFlux<Integer> publisher = Flux.range(1, 20)
.delayElements(Duration.ofSeconds(1))
.replay(8);
publisher.publishOn(Schedulers.newSingle("fast"))
.subscribe(i -> {
System.out.println("Fast subscriber - Received " + i);
sleep(1);
});
publisher.publishOn(Schedulers.newSingle("slow"))
.subscribe(i -> {
System.out.println("Slow subscriber - Received " + i);
sleep(5);
});
publisher.connect();
}
private static void sleep(int seconds) {
try {
Thread.sleep(seconds * 1000L);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
这无法实现目标,因为无论如何都要缓冲项目。缓冲区的大小仅在下一个订阅者订阅之前应用。
如何使用Project Reactor的Flux获得每个订阅者的独立缓冲和丢弃?
注1:我问了一个相关问题here,但在这种情况下,问题只涉及一种方法。
注2:如果你很好奇,我正在尝试在Project Reactor中编写this example代码,但我正在努力解决它。