У мене є два API відпочинку ". Я використовую Spring Boot і MongoDB.
По-перше, клієнт викликає api1, який вставляє запис до колекції mongo. Потім через кілька секунд api2 спробує прочитати запис вставки і виконати певний процес.
Але є ситуація, коли апі2, намагаючись прочитати запис, не вставив її до колекції через латентність api1.
У цьому випадку api2 не може виконати цей процес.
Один варіант, я можу подумати про це, коли api2 читає запис, і якщо він все ще не вставляє в монго, спати thead протягом декількох секунд і розбудити його (може зробити кілька часу, поки запис існує)
Які ще варіанти?
Оновити: Два api незалежні. Потік подібний до того, як після завершення завантажувати відео, яке викликає api1, і вставити носій з відмовою, і цей потік закінчується. Потім програма отримує зворотний виклик з зовнішньої системи обробки відео на api2, після завершення перекодування відео (як правило, після 30-х років) з refid, який потім api2 виконує деякі оновлення вставленого носія. Існує крайовий випадок, для відео дуже малого розміру зовнішня відеосистема діє швидко і дає зворотний виклик, де в той час моє додаток все ще вставляє носії в монго
Відповіді:
1 для відповіді № 1Я хотів би припустити, що ваш api1 після його виконаннявикликає api2 і передає йому ідентифікатор, який він вставив. Таким чином, api2 ніколи не повинен був би працювати передчасно. Інший спосіб полягає в тому, щоб використовувати чергу, де api1 розміщуватиме повідомлення, а api2 споживає повідомлення і обробляє його (кредит для користувача @warge, який згадав його у своєму коментарі)
0 для відповіді № 2
З вашого використання ви маєте не стільки вибору.
чистий спосіб зробити це - створити документ під час завантаження, так що api1 і api2 будуть оновлюватися, і виключення "not found" не буде.