我有两个Rest API。我使用Spring Boot和MongoDB。

首先,客户端调用api1,该api1将一条记录插入到mongo集合中。
然后几秒钟后,api2尝试读取插入记录并进行一些处理。

但是在某些情况下,有时api2尝试读取记录,但由于api1的延迟而未将其插入到集合中。

在这种情况下,api2将无法执行该过程。

我可以想到的一种选择是,当api2读取记录时,如果仍然没有插入到mongo中,则将thead睡眠几秒钟并唤醒它(可以花很少的时间直到记录存在)

我还有什么其他选择?

更新:
这两个API是独立的。该流程就像在完成视频上传后调用api1并插入带有refid的媒体一样,该流程完成。然后,在使用refid完成视频转码后(通常在30秒左右之后),应用程序会从外部视频处理系统收到对api2的回调,然后api2对插入的媒体进行一些更新。有一个极端的情况,对于非常小尺寸的视频,外部视频系统会快速动作并提供回调,此时我的应用程序仍会将媒体插入到mongo中

最佳答案

我建议您的api1完成后会调用api2并将其插入的ID传递给它。这样,api2将永远不必过早运行。另一种方法是使用队列,其中api1将放置一条消息,而api2将使用该消息并对其进行处理(致谢@warge用户,该用户在其评论中提到了该消息)

09-27 06:56