首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有容错功能的最佳设计,用于定期调用API检索更新

具有容错功能的最佳设计,用于定期调用API检索更新
EN

Stack Overflow用户
提问于 2022-07-21 02:53:39
回答 1查看 102关注 0票数 0

clientA说,我是一个客户端,我需要每15分钟以一次定期的方式调用服务器,比如serverA,以便从serverA获得新的更新。

ServerA只能公开一个API,它输入两个参数--启动时间和结束时间,并返回新创建的帐户详细信息列表。

示例serverA公开: REST如下所示

代码语言:javascript
复制
http://somedomainname.com/getAccounts?startTime={say currentTime-15minutes}&endTime={say currentTime}

响应:

代码语言:javascript
复制
{[
123,
456,
789
....
]} // List of account numbers that was created in serverA between supplied start time and end time.

作为clientA,我必须定期调用上面的API (比如每15分钟一次),并将更新存储在我的客户端数据库中。考虑到容错性,设计我的clientA系统调用serverA API、检索更新并将其存储在客户端数据库中的最佳方法是什么,比如serverA由于任何原因而关闭,或者clientA本身出现故障,或者任何其他意想不到的错误场景。我还想避免重试机制中的重复调用。

很高兴听到你对此的意见。用Spring框架用Java语言编写的clientA

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 11:53:19

在我的经验中,如果有可能在系统之间同步数据,那么最好使用push而不是pull方法。从API中提取更新,特别是多个客户端的更新,会很快导致API性能方面的问题。相反,推送方法的规模更大--任何数量的客户都可以订阅更新,更新发布者可以在方便的时间内发送更新。

但回到你的问题上。我任何情况下,你都需要一些锚来跟踪最后一次成功检索更新的时间。在非常简单的场景中--在DB表中存储一个字段,例如LastSuccesfullAccountUpdateCallDatetime、.If调用、成功更新该字段。如果调用失败,就不更新它。下一次当你的客户知道从哪里开始。在该表中更复杂的场景中,您可以存储用于检索帐户更新的所有时间段。例如。

代码语言:javascript
复制
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表,并在需要时为每个时间段执行协调。让我们使用DB帐户中的TimePeriod.Id =1:123,456,但后来发现还有更多。您使用存储在DB中的时间进行调用,得到例如123,456,789,您将看到应该添加789。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73060170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档