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

REST - asynchroniczne pobieranie zasobu

Object Storage Arubacloud
0 głosów
770 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,160 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 (46,300 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ź 647 wizyt
pytanie zadane 14 marca 2018 w JavaScript przez Alwox Gaduła (4,840 p.)
0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 26 maja 2022 w Java przez wanttobeanengineer Obywatel (1,120 p.)
0 głosów
0 odpowiedzi 409 wizyt
pytanie zadane 13 marca 2020 w Java przez Xarti Obywatel (1,380 p.)

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...