/ Проблеми з затримкою обробляються, коли дві кінцеві точки REST зчитують однакові дані - java, mongodb, rest, spring-mvc, spring-boot

Обертати питання про затримку, коли два кінцеві точки REST читають ті ж дані - java, mongodb, rest, spring-mvc, spring-boot

У мене є два 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" не буде.