Механизм противодавления в синхронном методе от Project Reactor - PullRequest
0 голосов
/ 23 сентября 2018

История такова: когда происходит логический сценарий, в какой-то момент процесса мне нужно вызвать веб-сервис из другого приложения.Этот сервис блокирует мой поток, пока удаленный сервер не ответит мне.Когда я знал концепцию реактора, я решил перенести часть сервисного вызова в мир реакторов и задействовать механизм противодавления, потому что иногда удаленный сервер работает медленно.

Другими словами, у меня есть следующий дизайн:

enter image description here

В этой модели MyApp имеет пул потоков, который начинается каждым потоком при поступлении нового запроса в MyApp , а затем позвоните Удаленный сервер и заблокируйте, пока Удаленный сервер не ответит.В моей модели, поскольку следующие потоки запросов не блокируются для Удаленный сервер и Реактивная часть , вызывает Удаленный сервер .Это означает, что я хочу освободить поток MyApp и обработать другой запрос.

enter image description here

Я написал некоторый код, подобный следующему:

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 , который принимает каждый запрос от My App и затем вызывает удаленный сервер в бесконечном цикле.

...