让我们假设我有一个具有以下属性和初始值的雇员实体:
Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , status : "INITIATED"}
请注意,我不能使用实体键查询获得强一致的结果,因为在这种情况下,我们没有实体键.。
从应用程序引擎后端,我们有集成的防火墙,以发送通知给员工。当通知到达员工的安卓手机,我们的安卓应用程序点击rest endpoint1使用安卓后台服务,以更新状态从启动到交付。当员工点击通知时,我们的安卓应用程序打开安卓摄像头,捕捉员工正面,并使用REST endpoint2向服务器发送压缩图像。另外还有一个endpoint3,它使用安卓后台服务保存了高质量的相同捕捉到的面部图像。
REST端点1 :
1-使用filter(employeeID)和filter(requestID)加载实体,2-更新状态以交付3-保存实体4-将成功结果发送给安卓客户端。
来自endpoint1的更新实体应该如下所示:
Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , status : "DELIVERED"}
REST Endpoint2: 1-使用filter(employeeID)和filter(requestID) 2加载实体--存储捕获的面向云存储并保存下载的URL。3-将状态更新为“已完成”4-保存实体5-将成功结果发送到android客户端
来自endpoint2的更新实体应该如下所示:
Employee{Name : "Baqir", employeeID: "1234", profilePic: " cloud storage download URL",requestID: "123456" , status : "COMPLETED"}
REST Endpoint3: 1-使用filter(employeeID)和filter(requestID) 2加载实体,将捕获的面部高质量图像存储到云存储中,并保存下载的URL。4-保存实体5-将成功结果发送到android客户端。
来自endpoint3的更新实体应该如下所示:
Employee{Name : "Baqir", employeeID: "1234", profilePic: " cloud storage download URL", HQprofilePic: " cloud storage download URL", requestID: "123456" , status : "COMPLETED"}
问题: Android总是先执行endpoint1,然后执行endpoint2,然后执行endpoint3,然后从所有端点获得成功结果。但有时数据存储中的最终更新实体是由endpoint1更新的实体。
在执行端点1,2,3之后,数据存储中的最终实体是:
Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , status : "DELIVERED"}
在某些情况下,最终实体是endpoint1和endpoint3的结果。i.e
Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , HQprofilePic: " cloud storage download URL", status : "DELIVERED"}
发布于 2019-07-24 10:42:35
在所有端点中,可以将load the entity using filter(employeeID) and filter(requestID)
(最终是一致的)替换为:
您只需要知道初始创建实体与相应的employeeID和requestID之间的延迟,以及它在第1步中变得可见(即当该查询的索引被更新时)之间的延迟--直到出现这种情况,您将无法获得实体键。
https://stackoverflow.com/questions/57178818
复制相似问题