Всем привет, мне нужно в кратчайшие сроки изучить реактивное программирование WebFlux (projectreactor.io), а так же подтянуть навыки функционального программирования Stream API.
Моя задача переписать синхронный вызов в асинхронный вызов:
response = requestMethod.get().share().block();
Где requestMethod, имеет тип Supplier<Mono<ResponseItem<T>>>
посмотрел на Ютубе канал letsCode - плейлист с реактивщиной,
читаю сейчас книгу Реактивное программирование в spring 5, но это занимает довольно много времени. Есть ли более быстрый вариант?
Kosenkov
22 уровень
Как изучить реактивное программирование? WebFlux + Stream API
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Kosenkov Java Developer
14 марта, 13:58
Нашел такую тему - изучаю
в главе 6 «Не-блокирующие и асинхронные взаимодействия с WebFlux».
0
Сергеев ВикторMaster
13 марта, 21:07
гугл по проблеме и дебаг )
но вебфлакс та еще штука, дебажить сложно
вообще есть такая крутая штука как BlockHound
можно ее использовать для проверки блочится ли твой код (если да то веб запрос кинет 500 ошибку, или просто вылетит exception если не веб)
и с помощью него понять, когда функция начала работать и при этом перестала блокироваться
0
Kosenkov Java Developer
13 марта, 21:11
Да, проблема с вызовом синхронного кода из ассинхронного кода. Микросервис падает на ).block();
Согласен с вами, полная шляпа. Привык писать в итеративном стиле, даже Stream API толком никогда не использовал, только в учебных примерах. Ох встрял с этой реактивной шляпой.
0
Kosenkov Java Developer
13 марта, 21:21
Не могу полностью лог скинуть. Но суть должна быть понятна, как это переписать в ассинхроне - ломаю голову
0
Сергеев ВикторMaster
15 марта, 23:26
без примера кода что-то говорить не возможно, но дефолтная рекомендация, если код блокирующий, то пересаживать его на отдельный поток https://projectreactor.io/docs/core/release/reference/#faq.wrap-blocking
либо же делать неблокирующимся, тут уже все от кода зависит.
Блокирующее обычно запросы по сети или к диску, по сети - использовать асинхронные клиенты и к бд тоже (r2dbc). К фс - использовать nio или отдельные потоки
+2