• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

REST - asynchroniczne pobieranie zasobu

0 głosów
195 wizyt
pytanie zadane 3 czerwca 2018 w Java przez softkdp Obywatel (1,060 p.)
Witam, mam usługę REST której można podać URL jakiegoś zasobu i zasób ten zostanie pobrany i zapisany do bazy danych. Ponieważ jednak czasami taki zasób może być bardzo duży, chciałbym aby te pobieranie odbywało się asynchronicznie, tak żeby nie blokowało przyjmowania i obsługi żądań. Ponadto jeśli pobierany jest akurat inny zasób, to nowy zasób do pobrania czeka w jakiejś kolejce FIFO na swoją kolej.

Pomyślałem, żeby tworzyć nowe asynchroniczne wątki, które współdzieliłyby dostęp do jakiejś kolejki i zaczynały pobieranie, gdy ich url jest na początku kolejki i na koniec po pobraniu usuwały go z niej, niejako zwalniając pobieranie. Ale jakoś intuicyjnie nienajlepiej mi to wygląda, jak podczas pobierania większego zasobu narobię kupę wątków, które będą nic nie robiły tylko czekały.

Ma ktoś może sugestię jak do tego podejść? Z góry dziękuję za pomoc :)
komentarz 3 czerwca 2018 przez xenonso Mądrala (5,220 p.)
Wydaje mi się, że Spring udostępnia odpowiednie narzędzia służące do tego, przykładowo adnotacja @Async mogła by tu pomóc. Nie jestem jednak pewien co do tego rozwiązania więc daję to w komentarzu

1 odpowiedź

0 głosów
odpowiedź 3 czerwca 2018 przez ShiroUmizake Nałogowiec (45,600 p.)
Jeżeli bawisz się już REST to pojęcie ORM już kojarzysz. Możesz, to rozwiązać za pomocą commit (jest już w kolejce) oraz za pomocą wzorca projektowego UOW (Unit of Work), zaznacz pracę na konkretnym rekordzie + dostajesz mechanizm rollback w razie błędu lub zmiany w czasie samego zapisywania.

https://ramj2ee.blogspot.com/2013/08/unit-of-work-design-pattern.html#.WxPCW0iFM2w.

Aczkolwiek unikałbym taki rozwiązań i już lepiej pobawić data-balancerem i ustawić czyszczenie cache zanim na trafi hard-drive na dłuższy czas (API oracle posiada taką opcje)

Bądż wydzielić tę cześć API podpiąć pod narzędzia służące do kolejkowania jak np: RabbitMQ.

W sumie to zależy ile to dużo. 1 GB? 20 MB? Może wtedy lepszym rozwiązaniem byłoby StreamReader.

Podobne pytania

0 głosów
1 odpowiedź 217 wizyt
pytanie zadane 14 marca 2018 w JavaScript, jQuery, AJAX przez Alwox Gaduła (4,860 p.)
0 głosów
1 odpowiedź 95 wizyt
pytanie zadane 26 czerwca w Java przez SztyJkmajster Z Pols Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 97 wizyt
pytanie zadane 24 czerwca w Java przez SztyJkmajster Z Pols Nowicjusz (190 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

67,231 zapytań

114,191 odpowiedzi

242,029 komentarzy

45,639 pasjonatów

Przeglądających: 113
Pasjonatów: 1 Gości: 112

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...