Пружинное реактивное программирование противодавления
Я новичок в реактивном программировании. Может кто-нибудь объяснить, что происходит, когда вызывается mono.subscribe или какой-либо обработчик конвейера обработки данных? Я прочитал из документации, что концепция противодавления - это то, сколько данных способна получить потребляющая сторона. Но у меня вопрос об асинхронном выполнении обработчиков. Когда некоторые данные публикуются издателем, как вызывается подписка? Как обработчики могут читать переменные из стека?
void makeHttpRequest(MyRequest myRequest, String endpoint) {
SomeOtherObject some = getSomeData();
myWebClient.post()
.uri(URI.create(endpoint))
.body(Mono.just(myRequest), MyRequest.class)
.exchange()
.flatMap(clientResponse -> {
return clientResponse.bodyToMono(MyResponse.class);
})
.map(resp -> {
Map<String, Object> data = new HashMap<>();
data.put("request", myRequest);// I can access myRequest. But how?
data.put("response", resp);
data.put("more", some);// same question as myRequest
return data;
})
.subscribe(data -> {
MyRequest req = data.get("request");
MyResponse resp = data.get("response");
})
}