Wpis z mikrobloga

Jest sens używać WebClient, jeśli aplikacja stoi na servlecie i wszystkie inne operacje (np. na bazie) są blokujące? Kiedyś może i tak trzeba będzie przepisać wszystko na Reactive. Na początku klient chciał gRPC, ale ze względu na brak wsparcia zmienił na REST.

Generalnie to jeśli apka stoi na servlecie, to operacje są blokujące i raczej nie ma znaczenia, czy obsługą zapytań do zewnętrznych usług zajmie się WebClient, czy RestTemplate, czy nawet natywny HttpClient. Tak mi się przynajmniej wydaje, ale może czegoś nie zauważam.

Użytkownik uderza pod adres ---> Tomcat ---> Spring ---> WebClient ---> block() bo wątek musi dostać odpowiedź.

I ten wątek będzie istniał tak długo, aż klient odpowiedź otrzyma lub zrezygnuje.

Ale będą też zadania (joby), gdzie pewne operacje będą odpalane co pewien czas automatycznie. No i czy tu jest znaczenie, czy będą to operacje blokujące na puli wątków (przynajmniej mamy jakąś kontrolę), czy wszystko reaktywnie? Tutaj widzę jedną zaletę, że jeśli zewnętrzne usługi odpowiadałyby długo, to można by zrównoleglić ilość zapytań bez tworzenia 1000 wątków w puli i 999999 w kolejce, ale aż tak to nie będzie. Nawet nie można wysłać 99999 zapytań na raz. Próbuję zrozumieć faktycznie korzyści zastosowania tutaj podejścia reaktywnego poza tym, że wątek zużywa więcej zasobów systemu.

#java #spring #programowanie #programista15k
  • 7
  • Odpowiedz
@SendMeAnAngel: sens używania jest taki, że Spring team sam oficjalnie mówi, że RestTemplate jest w maintenance mode i nie będą wspiera tego dalej (ostatecznie, w którejś wersji będzie już jako deprecated) i w tym momencie zalecanym jest używanie WebClienta zarówno w aplikacjach reaktywnych i niereaktywnych. Różnica jest tylko taka, że w przypadku aplikacji niereaktywnych webclient zachowa się identycznie jak resttemplate w przypadku .block().
  • Odpowiedz
@SendMeAnAngel: Troszkę chyba płyniesz parostatkiem w tych rozkminach.
Przede wszystkim przy wejściu na RP nie będziesz musiał przepisywać wszystkiego przy wykorzystaniu WebClienta.
Po drugie to moduł wykorzystujący WebClienta jest stosunkowo przyjemny integracyjnie i będzie wspierany przez długi czas. Jako element większej układanki systemu jest rozwiązaniem optymalnym.
  • Odpowiedz
nie jest deprecated i jeszcze dużo czasu minie zanim zostanie usunięty.


@ly000: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern API and supports sync, async, and streaming scenarios.
najwyrazniej zmienili narracje bo wczesniej tam bylo:

NOTE: As of 5.0, the non-blocking, reactive org.springframework.web.reactive.client.WebClient offers a
  • Odpowiedz