当两个 REST 端点读取相同的数据时处理延迟问题



我有两个休息的api。我使用 Spring Boot 和 MongoDB。

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

但有些情况下,当api2尝试读取记录时,由于api1的延迟,它没有插入到集合中。

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

我能想到的一个选项是,当 api2 读取记录时,如果它仍然没有插入 mongo,请让 thead 休眠几秒钟并唤醒它(可以做几次直到记录存在(

我还有什么其他选择?

更新: 这两个 API 是独立的。该流程就像在完成上传视频后,它调用 api1 并插入带有 refid 的媒体,该流完成。然后,应用程序在使用 refid 完成视频转码后(通常在 30 秒左右(接收来自外部视频处理系统到 api2 的回调,然后 api2 对插入的媒体进行一些更新。有一个边缘情况,对于非常小的视频,外部视频系统动作很快并给出回调,当时我的应用程序仍在将媒体插入 mongo

我建议你的 api1 一旦完成调用 api2 并传递给它插入的 id。这样 api2 就永远不必过早运行。另一种方法是使用队列,其中 api1 将放置一条消息,api2 使用消息并处理它(归功于在他的评论中提到它的@warge用户(

从您的用例来看,您没有太多选择。

执行此操作的干净方法是在上传时创建文档,以便 API1 和 API2 将在此基础上更新,并且不会有"未找到"异常。

最新更新