Web Services 最佳容错设计,可定期检索更新并调用API

gpnt7bae  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(171)

我是一个客户端,比如说clientA,我需要每15分钟定期调用一个服务器,比如说serverA,以从serverA获得新的更新。
ServerA仅能够公开一个API,该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分钟)并将更新存储在我的客户机数据库中。设计我的客户机的最佳方法是什么?调用服务器的系统API,检索更新并将其存储在我的客户端数据库中,考虑到容错性,例如serverA是否由于任何原因而停机或clientA自身是否停机或任何其他意外错误情况。我还想避免重试机制中的重复调用。
如果能听到你的意见,那就太好了。我的clientA将用Java语言编写,并使用Sping Boot 框架

j0pj023g

j0pj023g1#

根据我的经验,如果可以在系统之间同步数据,最好使用推送而不是拉取的方法。从API拉取更新,尤其是多个客户端的更新,会很快导致API性能问题。相反的推送方法更好--任何数量的客户端都可以订阅更新,更新的发布者可以在方便的时间发送更新。
但回到你的问题。我在任何情况下,你需要某种锚来跟踪什么时候是最后一次成功检索更新。在非常简单的情况下-存储在DB表中的一个字段,例如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,您在DB帐户中拥有:123,456,但后来发现还有更多。你用存储在DB中的时间进行调用,得到了例如123,456,789,你看到应该加上789。

相关问题