Пример реактивного приложения на 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
  • НаукаНаука

Комментарии • 27

  • @v.volkau
    @v.volkau 3 месяца назад +1

    Отличное видео, пересмотрел второй раз спустя время и всё понял. Замечательный пример про бармена. Пожалуйста, продолжайте использовать такие бытовые примеры для объяснения - очень хорошо запоминается.

  • @sousTony
    @sousTony 9 месяцев назад +1

    ну что тут сказать - вы лучший, точнее только вас я и понимаю))

  • @takezo_kyiv
    @takezo_kyiv 4 месяца назад

    Спасибо большое за видео!
    Очень познавательно

  • @bebrodudel
    @bebrodudel 2 года назад

    Сижу разбираюсь с вашим кодом. Не совсем понятно, каким образом запускается веб-страница на localhost:8082, отправляет запрос все по тому же хосту, а данные возвращаются с клиента, который обслуживает url: localhost:8081

    • @petrelevich
      @petrelevich  2 года назад +1

      Все порты стандартно оописываются в application.yml
      источник данных запускается на 8080
      промежуточный обработчик работает на 8081
      клиентская часть на 8082
      "браузер" обращается к "клиентской части", "клиентская часть" - к "промежуточному обработчику", а он - к "источнику данных".
      получается такая цепочка вызовов.

    • @bebrodudel
      @bebrodudel 2 года назад

      @@petrelevich Спасибо за ответ! Еще такой вопрос: если я отправлю данные с формы методом post, то вернется ли поток данных в ответе после запуска логики приложения? Допустим если я тот же seed хочу передавать не в pathVarieble, а в RequestBody

    • @petrelevich
      @petrelevich  2 года назад

      @@bebrodudel
      public Flux data(@PathVariable("seed") long seed) {
      ....
      return client.get().uri(String.format("/data/%d", seed))
      .....
      }
      Это просто java-код, нет никакой магии. Как передадите seed, так и будет работать. Можно хоть из файла прочитать, хоть по tcp/ip запросить.

    • @bebrodudel
      @bebrodudel 2 года назад

      @@petrelevich просто дело в том, что я пытаюсь решить свой таск, где мне нужно запускать генератор данных данными, которые вводятся пользователем из html формы. Поэтому пытаюсь найти верный вектор, чтобы понять куда копать. В связи с этим перефразирую вопрос. При отправке post-запросов, может ли вернутся поток данных на веб страницу?

    • @petrelevich
      @petrelevich  2 года назад

      @@bebrodudel
      Не вижу причин, почему это нельзя сделать.

  • @TheExcentro
    @TheExcentro 2 года назад

    Качество видео специально такое низкое?

    • @petrelevich
      @petrelevich  2 года назад

      Нет, на youtube все еще идет обработка видео.
      Почему-то очень долго в этот раз.
      После завершения должно быть 4K.

  • @user-xj4hi5ld4g
    @user-xj4hi5ld4g 5 месяцев назад +1

    откуда при раскладе 3 сек на источник и 2 сек на обработчик может возникнуть очередь?
    источник генерит медленнее чем обработчик обрабатывает.
    1,2,3 источник
    4,5 обработчик
    4,5,6 источник
    7,8 обработчик
    7,8,9 источник

    • @petrelevich
      @petrelevich  5 месяцев назад

      какую очередь имеете в виду?

    • @user-xj4hi5ld4g
      @user-xj4hi5ld4g 5 месяцев назад

      @@petrelevich вот тут: 1 час 20 минут

    • @petrelevich
      @petrelevich  5 месяцев назад

      @@user-xj4hi5ld4g Пересмотрел, начиная с этого момента ruclips.net/video/UDGZV0tzPQ8/видео.htmlsi=WwyOF8Sv5okuUib_&t=4743 Ничего не услышал про "очередь".

    • @user-xj4hi5ld4g
      @user-xj4hi5ld4g 5 месяцев назад

      ​@@petrelevich
      там в комментах задан вопрос и вот текстовая расшифровка: 1:20:57 у вас есть некий некая задержка
      а на 1:21:15 звучит "и в итоге тут должно больше наплодиться.... чем больше работаем тем больше накапливается разница"
      это где будет накопление? и откуда возьмется накопление учитывая что генерация медленнее чем обработка?

    • @petrelevich
      @petrelevich  5 месяцев назад

      @@user-xj4hi5ld4g Теперь понятно, в чем вопрос. В классе DataProducerStringReactor данные генерируются без ограничения скорости, но потом добавляется задержка delayElements(Duration.ofSeconds(3)). Чтобы согласовать быстрый источник и медленный обработчик включается механизм backpressure. Это приводит к тому, что данные создаются в генераторе и буферизируются (накапливаются) пока потребитель не сможет их обработать. После обработки создается новая порция данных и они буферизируются, пока не обработаются.
      Понятно пояснил? Надо, наверное, видос на эту тему записать?