我有两个休息api's。我使用Spring Boot和MongoDB。
首先,客户端调用api1,将记录插入mongo集合。 几秒钟后,api2尝试读取插入记录并进行一些处理。
但是有时候api2会尝试读取记录,但是由于api1的延迟而没有插入到集合中。
在这种情况下,api2无法完成此过程。
我可以想到一个选项,当api2读取记录时,如果它还没有插入到mongo中,请将thead睡眠几秒钟并将其唤醒(可以记录几次直到记录存在)
我还有其他选择吗?
更新: 这两个api是独立的。流程就像在完成上传视频时调用api1并插入带有refid和流完成的媒体。然后,应用程序在视频转码完成后(通常在30秒左右之后)使用refid接收从外部视频处理系统到api2的回调,然后api2对插入的媒体进行一些更新。有一个边缘情况,对于非常小的视频外部视频系统快速行动并给出回调,那时我的应用程序仍然将媒体插入到mongo
答案 0 :(得分:1)
我建议你的api1一旦完成调用api2并传递它插入的id。这样api2永远不会过早运行。另一种方法是使用一个队列,其中api1将发出一条消息,api2会消息并处理它(归功于在他的评论中提到它的@warge用户)
答案 1 :(得分:0)
从您的用例中您没有太多选择。
干净的方法是在上传时创建文档,以便更新api1和api2,并且不会有“未找到”异常。