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

时间:2017-08-09 17:18:43

标签: java mongodb rest spring-mvc spring-boot

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

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

但是有时候api2会尝试读取记录,但是由于api1的延迟而没有插入到集合中。

在这种情况下,api2无法完成此过程。

我可以想到一个选项,当api2读取记录时,如果它还没有插入到mongo中,请将thead睡眠几秒钟并将其唤醒(可以记录几次直到记录存在)

我还有其他选择吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

从您的用例中您没有太多选择。

干净的方法是在上传时创建文档,以便更新api1和api2,并且不会有“未找到”异常。