Mam klienta webowego do aplikacji REST napisanej w Spring Boot. Po nadejściu zapytania POST uruchamiane jest zapytanie do bazy danych, które może trwać minutę, 10 minut albo znacznie dłużej. Dlatego będzie to realizowane na serwerze asynchronicznie. Teraz mam taki pomysł, żeby po powiedzmy maksymalnie 3 minutach wykonywania zapytania serwlet zwrócił odpowiedź do klienta. Normalnie byłby to timeout i info, że zapytanie trwa zbyt długo. Ale ja chcę to zrobić tak, że zapytanie nadal się realizuje, a po zakończeniu wynik jest przesyłany na maila. Klient dostaje info, że taka zmiana nastąpiła. Jeżeli zapytanie trwa mniej niż 3 minuty, to klient dostaje wynik zapytania.
Po stroni interfejsu webowego nie widzę tutaj problemu, bo wywołuję zapytanie tak czy inaczej asynchronicznie i dalsza część realizuje się po odpowiedzi serwera nie blokując interfejsu użytkownika. Będzie tylko ograniczenie ile takich zapytań można ustawić w kolejce. Tak więc pytanie dotyczy jak to można zrobić po stronie serwera.
Drugi problem to taki, czy można jakoś pobrać ilość wątków realizujących asynchroniczne zapytania w spring boot? Nie chciałbym, żeby ktoś naklikał kolejkę w kliencie przekraczającą możliwości serwera.
Z góry dziękuję za pomysły w temacie.