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 № 1Sugerował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”.