故事是:当发生逻辑场景时,在流程中的某个时刻,我需要从另一个应用程序调用Web服务。该服务被阻止,因此我的线程被阻止,直到远程服务器回答我为止。当我知道反应堆概念时,我决定将服务调用部分迁移到反应堆世界并对此进行反压机制,因为有时远程服务器的运行速度会很慢。
换句话说,我的设计如下:
在此模型中, MyApp 具有一个线程池,当新请求收入到 MyApp 中,然后调用 Remote Server 时,每个线程都会开始直到远程服务器回答为止。 在我心目中的模型中,由于以下请求线程不会阻塞 Remote Server ,并且 Reactive Part 会调用 Remote Server 。这意味着我要释放 MyApp 线程并处理另一个请求。
我写了一些如下代码:
Flux<Integer> flux = Flux.generate(sick-> //call Remote Server service );
flux.onBackpressureBuffer(100, BufferOverflowStrategy.ERROR)
.subscribe(s->System.out.println(Thread.currentThread().getName() + " - result is ==>> " + s)
对我来说,重要的选择是背压(在上面的代码中,我简单地将其设置为100,但是我想要动态行为)。我想减少远程服务器的运行速度。我不知道通量是否正确,因为我认为我必须有一个 Flux 来接受来自我的应用的每个请求,然后在无限循环中调用Remote Server。