Пример реактивного приложения на Spring WebFlux
HTML-код
- Опубликовано: 15 дек 2021
- В одном из предыдущих видео ( • Разработка двух микрос... )
была разработана пара микросервисов для получения курса валют.
В этом видео переведем микросервисы на реактивный Spring WebFlux.
Оригинал записан для канала Отус
• Демо-занятие курса «Ja...
Обучаем программировать на java:
otus.ru/lessons/java-professi...
Код примеров:
github.com/petrelevich/curren...
github.com/petrelevich/jvm-di...
Чат в телеге для вопросов и обсуждений:
t.me/jvm_home - Наука
Отличное видео, пересмотрел второй раз спустя время и всё понял. Замечательный пример про бармена. Пожалуйста, продолжайте использовать такие бытовые примеры для объяснения - очень хорошо запоминается.
ну что тут сказать - вы лучший, точнее только вас я и понимаю))
Спасибо большое за видео!
Очень познавательно
Сижу разбираюсь с вашим кодом. Не совсем понятно, каким образом запускается веб-страница на localhost:8082, отправляет запрос все по тому же хосту, а данные возвращаются с клиента, который обслуживает url: localhost:8081
Все порты стандартно оописываются в application.yml
источник данных запускается на 8080
промежуточный обработчик работает на 8081
клиентская часть на 8082
"браузер" обращается к "клиентской части", "клиентская часть" - к "промежуточному обработчику", а он - к "источнику данных".
получается такая цепочка вызовов.
@@petrelevich Спасибо за ответ! Еще такой вопрос: если я отправлю данные с формы методом post, то вернется ли поток данных в ответе после запуска логики приложения? Допустим если я тот же seed хочу передавать не в pathVarieble, а в RequestBody
@@bebrodudel
public Flux data(@PathVariable("seed") long seed) {
....
return client.get().uri(String.format("/data/%d", seed))
.....
}
Это просто java-код, нет никакой магии. Как передадите seed, так и будет работать. Можно хоть из файла прочитать, хоть по tcp/ip запросить.
@@petrelevich просто дело в том, что я пытаюсь решить свой таск, где мне нужно запускать генератор данных данными, которые вводятся пользователем из html формы. Поэтому пытаюсь найти верный вектор, чтобы понять куда копать. В связи с этим перефразирую вопрос. При отправке post-запросов, может ли вернутся поток данных на веб страницу?
@@bebrodudel
Не вижу причин, почему это нельзя сделать.
Качество видео специально такое низкое?
Нет, на youtube все еще идет обработка видео.
Почему-то очень долго в этот раз.
После завершения должно быть 4K.
откуда при раскладе 3 сек на источник и 2 сек на обработчик может возникнуть очередь?
источник генерит медленнее чем обработчик обрабатывает.
1,2,3 источник
4,5 обработчик
4,5,6 источник
7,8 обработчик
7,8,9 источник
какую очередь имеете в виду?
@@petrelevich вот тут: 1 час 20 минут
@@user-xj4hi5ld4g Пересмотрел, начиная с этого момента ruclips.net/video/UDGZV0tzPQ8/видео.htmlsi=WwyOF8Sv5okuUib_&t=4743 Ничего не услышал про "очередь".
@@petrelevich
там в комментах задан вопрос и вот текстовая расшифровка: 1:20:57 у вас есть некий некая задержка
а на 1:21:15 звучит "и в итоге тут должно больше наплодиться.... чем больше работаем тем больше накапливается разница"
это где будет накопление? и откуда возьмется накопление учитывая что генерация медленнее чем обработка?
@@user-xj4hi5ld4g Теперь понятно, в чем вопрос. В классе DataProducerStringReactor данные генерируются без ограничения скорости, но потом добавляется задержка delayElements(Duration.ofSeconds(3)). Чтобы согласовать быстрый источник и медленный обработчик включается механизм backpressure. Это приводит к тому, что данные создаются в генераторе и буферизируются (накапливаются) пока потребитель не сможет их обработать. После обработки создается новая порция данных и они буферизируются, пока не обработаются.
Понятно пояснил? Надо, наверное, видос на эту тему записать?