/ / Obsługa problemów z opóźnieniem, gdy dwa punkty końcowe REST odczytują te same dane - java, mongodb, rest, spring-mvc, spring-boot

Obsługa problemów z opóźnieniem, gdy dwa punkty końcowe REST odczytują te same dane - java, mongodb, reszta, spring-mvc, spring-boot

Mam dwa pozostałe API. Używam Spring Boot i MongoDB.

Po pierwsze, klient wywołuje api1, które wstawiają rekord do kolekcji mongo. Następnie po kilku sekundach api2 próbuje odczytać wstawiony rekord i wykonać pewien proces.

Ale zdarzają się sytuacje, gdy api2 próbuje odczytać rekord, nie został on wstawiony do kolekcji z powodu opóźnienia przez api1.

W takim przypadku api2 nie jest w stanie wykonać tego procesu.

Jedną z opcji mogę o tym pomyśleć, gdy api2 przeczyta rekord, a jeśli nadal nie jest włożony do mongo, spij thead przez kilka sekund i obudź go (może to potrwać kilka minut, aż rekord będzie istniał)

Jakie inne opcje mam?

Aktualizacja: Dwa API są niezależne. Przepływ przypomina, że ​​po zakończeniu przesyłania wideo wywołuje api1 i wstawia nośnik z refid i zakończeniem przepływu. Następnie aplikacja odbiera wywołanie zwrotne z zewnętrznego systemu przetwarzania wideo do api2, po zakończeniu transkodowania wideo (zwykle po około 30 s) z refid, który następnie api2 dokonuje aktualizacji na włożonym nośniku. Istnieje przypadek krawędziowy, w przypadku bardzo niewielkich rozmiarów wideo zewnętrzny system wideo działa szybko i oddzwania, gdy w tym czasie moja aplikacja wciąż wkłada media do mongo

Odpowiedzi:

1 dla odpowiedzi № 1

Sugerowałbym, że twój api1 po zakończeniuwywołuje api2 i przekazuje identyfikator, który wstawił. W ten sposób api2 nigdy nie musiałby działać przedwcześnie. Innym sposobem jest użycie kolejki, w której api1 umieści wiadomość, a api2 zużyje wiadomość i przetworzy ją (podziękowania dla użytkownika @warge, który wspomniał o tym w swoim komentarzu)


0 dla odpowiedzi nr 2

Z twojej skrzynki nie masz tak dużego wyboru.

najlepszym sposobem na to jest utworzenie dokumentu w czasie przesyłania, aby api1 i api2 były na nim zaktualizowane i nie będzie wyjątku „nie znaleziono”.