Я новичок ie в реактивном программировании. Может кто-нибудь объяснить, что происходит, когда вызывается 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");
})
}