我是一個客戶說clientA,我需要每15分鐘定期呼叫一個服務器說serverA,以從serverA獲取新的更新。
ServerA 只能公開一個 API,它接受 2 個引數——開始時間和結束時間,并回傳新創建的帳戶詳細資訊串列。
示例 serverA 公開:REST GET Api 看起來像這樣
http://somedomainname.com/getAccounts?startTime={say currentTime-15minutes}&endTime={say currentTime}
回復:
{[
123,
456,
789
....
]} // List of account numbers that was created in serverA between supplied start time and end time.
作為clientA,我將不得不定期呼叫上述API(比如每15分鐘一次)并將更新存盤在我的客戶端資料庫中。設計呼叫 serverA API 的 clientA 系統、檢索更新并將其存盤在我的客戶端資料庫中的最佳方法是考慮容錯性,例如 serverA 因任何原因關閉或 clientA 本身關閉或任何其他意外錯誤場景。我還想避免重試機制中的重復呼叫。
很高興聽到您對此的看法。我的 clientA 將使用 Spring Boot 框架用 Java 語言撰寫
uj5u.com熱心網友回復:
根據我的經驗,如果可以在系統之間同步資料,最好使用推送而不是拉取方法。從 API 中提取更新,尤其是由多個客戶端更新會很快導致 API 性能出現問題。相反的推送方法可以更好地擴展——任何數量的客戶端都可以訂閱更新,更新的發布者可以在方便的時候發送它們。
但回到你的問題。我無論如何都需要某種錨來跟蹤上次成功檢索更新的時間。在非常簡單的場景中 - 使用一個欄位存盤在資料庫表中,例如LastSuccesfullAccountUpdateCallDatetime
。如果呼叫成功,則更新此欄位。如果呼叫失敗,您不會更新它。下次您的客戶知道從哪里開始。在該表中更復雜的情況下,您可以存盤用于檢索帳戶更新的所有時間段。例如
ID StartTime Success
1 01-01-2021 00:00:00 true
2 01-01-2021 00:15:00 false
3 01-01-2021 00:30:00 true
這些時間段可以預先生成,也可以由客戶作為呼叫的結果插入。
然后,您可以將此 ID 鏈接到 Account 表,并在需要時為每個時間段執行對帳。讓我們在資料庫帳戶中設定 TimePeriod.Id = 1 :123,456
但后來發現還有更多。您使用存盤在資料庫中的時間撥打電話,例如123,456,789
,您看到應該添加 789。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/507598.html
下一篇:從SAP公開SOAP服務?