我有兩個休息API。我使用Spring Boot和MongoDB。當兩個REST端點讀取相同的數據時處理延遲問題
首先,客戶端調用將記錄插入到mongo集合中的api1。 然後幾秒鐘後,api2嘗試讀取插入記錄並執行一些過程。
但有時候會出現這樣的情況,當api2嘗試讀取記錄時,由於api1的延遲而沒有插入集合。
在這種情況下,api2無法執行此過程。
我可以想到的一個選項,當api2讀取記錄時,如果它仍然沒有插入到mongo中,請將睡眠時間睡幾秒鐘並喚醒它(可以做幾次直到記錄存在)
我還有其他選擇嗎?
更新: 這兩個API是獨立的。流程就像在完成上傳視頻時調用api1並插入帶有refid和流程完成的媒體。然後,應用程序在視頻轉碼完成後(通常在30秒左右之後)用refid接收從外部視頻處理系統到api2的回叫,然後api2對插入的媒體進行一些更新。有一個邊緣的情況下,對於非常小的視頻外部視頻系統的行動很快,並給出回調,那時我的應用程序仍然插入媒體到mongo
爲什麼不使用事件系統?把你的數據放到一個代理中,然後由一個監聽器處理,這個監聽器會處理和存儲數據到DB – wargre
@wargre那麼這兩個API是獨立的。流程就像在完成上傳視頻時調用api1並插入帶有refid和流程完成的媒體。然後,應用程序在視頻轉碼完成後(通常在30秒左右之後)用refid接收從外部視頻處理系統到api2的回叫,然後api2對插入的媒體進行一些更新。有一個邊緣情況,對於非常小尺寸的視頻,外部視頻系統動作迅速,並提供回調,那時我的應用程序仍然將媒體插入到mongo中。 – Harshana
@Harshana,聽起來有點太複雜了......我還是會用api1去調用api2,一旦它完成,或者api1發佈事件,然後想要(在你的情況下是api2)註冊這個事件並且需要行動。 –