clientA说,我是一个客户端,我需要每15分钟以一次定期的方式调用服务器,比如serverA,以便从serverA获得新的更新。
ServerA只能公开一个API,它输入两个参数--启动时间和结束时间,并返回新创建的帐户详细信息列表。
示例serverA公开: REST如下所示
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分钟一次),并将更新存储在我的客户端数据库中。考虑到容错性,设计我的clientA系统调用serverA API、检索更新并将其存储在客户端数据库中的最佳方法是什么,比如serverA由于任何原因而关闭,或者clientA本身出现故障,或者任何其他意想不到的错误场景。我还想避免重试机制中的重复调用。
很高兴听到你对此的意见。用Spring框架用Java语言编写的clientA
发布于 2022-07-22 11:53:19
在我的经验中,如果有可能在系统之间同步数据,那么最好使用push而不是pull方法。从API中提取更新,特别是多个客户端的更新,会很快导致API性能方面的问题。相反,推送方法的规模更大--任何数量的客户都可以订阅更新,更新发布者可以在方便的时间内发送更新。
但回到你的问题上。我任何情况下,你都需要一些锚来跟踪最后一次成功检索更新的时间。在非常简单的场景中--在DB表中存储一个字段,例如LastSuccesfullAccountUpdateCallDatetime、.If调用、成功更新该字段。如果调用失败,就不更新它。下一次当你的客户知道从哪里开始。在该表中更复杂的场景中,您可以存储用于检索帐户更新的所有时间段。例如。
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。
https://stackoverflow.com/questions/73060170
复制相似问题