我有两个休息API。我使用Spring Boot和MongoDB。当两个REST端点读取相同的数据时处理延迟问题
首先,客户端调用将记录插入到mongo集合中的api1。 然后几秒钟后,api2尝试读取插入记录并执行一些过程。
但有时候会出现这样的情况,当api2尝试读取记录时,由于api1的延迟而没有插入集合。
在这种情况下,api2无法执行此过程。
我可以想到的一个选项,当api2读取记录时,如果它仍然没有插入到mongo中,请将睡眠时间睡几秒钟并唤醒它(可以做几次直到记录存在)
我还有其他选择吗?
更新: 这两个API是独立的。流程就像在完成上传视频时调用api1并插入带有refid和流程完成的媒体。然后,应用程序在视频转码完成后(通常在30秒左右之后)用refid接收从外部视频处理系统到api2的回叫,然后api2对插入的媒体进行一些更新。有一个边缘的情况下,对于非常小的视频外部视频系统的行动很快,并给出回调,那时我的应用程序仍然插入媒体到mongo
为什么不使用事件系统?把你的数据放到一个代理中,然后由一个监听器处理,这个监听器会处理和存储数据到DB – wargre
@wargre那么这两个API是独立的。流程就像在完成上传视频时调用api1并插入带有refid和流程完成的媒体。然后,应用程序在视频转码完成后(通常在30秒左右之后)用refid接收从外部视频处理系统到api2的回叫,然后api2对插入的媒体进行一些更新。有一个边缘情况,对于非常小尺寸的视频,外部视频系统动作迅速,并提供回调,那时我的应用程序仍然将媒体插入到mongo中。 – Harshana
@Harshana,听起来有点太复杂了......我还是会用api1去调用api2,一旦它完成,或者api1发布事件,然后想要(在你的情况下是api2)注册这个事件并且需要行动。 –