簡體   English   中英

具有容錯功能的最佳設計,用於定期調用 API 檢索更新

[英]Best design with fault tolerant for retrieving updates periodically invoking an API

我是一個客戶說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 語言編寫

根據我的經驗,如果可以在系統之間同步數據,最好使用推送而不是拉取方法。 從 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM