Mám dva odpočívadlá. Používam Spring Boot a MongoDB.
Po prvé, klient vyvolá api1, ktorý vloží záznam do zbierky mongo. Potom sa po niekoľkých sekundách api2 pokúsi prečítať vložený záznam a urobiť nejaký proces.
Ale sú situácie, keď sa api2 pokúsi prečítať záznam, nebol vložený do zbierky kvôli latencii api1.
V takom prípade api2 nedokáže tento proces vykonať.
Jedna z možností, na ktorú si myslím, že keď si api2 prečíta záznam, a ak sa ešte stále nevkladá do mongo, spí na niekoľko sekúnd kúzlo a prebudí ho (môže to trvať, kým záznam neexistuje)
Aké ďalšie možnosti mám?
aktualizácia: Obidva api sú nezávislé. Tok je ako keď po dokončení odovzdania videa zavolá api1 a vloží médium s refid a tento tok skončí. Potom aplikácia prijme spätné volanie z externého systému na spracovanie videa do api2, po dokončení transkódovania videa (zvyčajne po 30 s) s refid, ktorý api2 potom vykoná nejaké aktualizácie vloženého média. Existuje okrajový prípad, pre veľmi malú veľkosť videa funguje externý video systém rýchlo a poskytuje spätné volanie, kde moja aplikácia v tom čase stále vkladá médiá do Mníchova.
odpovede:
1 pre odpoveď č. 1Navrhoval by som, aby ste svoj api1 urobilivyvolá api2 a odovzdá mu ID, ktoré vložil. Týmto spôsobom by api2 nikdy nemusel bežať predčasne. Druhým spôsobom je použitie frontu, kde api1 vloží správu a api2 správu spotrebuje a spracuje (kredit používateľovi @warge, ktorý ju uviedol vo svojom komentári)
0 pre odpoveď č. 2
Z vášho prípadu použitia nemáte na výber toľko.
čistým spôsobom je vytvoriť dokument v čase odovzdania, takže api1 a api2 sa v tomto aktualizujú a nebude existovať žiadna výnimka „nenájdená“.