查询模式

  A服务调用B服务超时,A必须确认B服务是否完成,可以做查询校验。

  例如,某个营销活动需要选择5k个商品参加,我们选择导入的方式,并生成导入结果反馈给客户。由应用层读取、筛选数据,批量(多线程)请求服务层,每次保存200个商品,服务层负责将200个商品落库,建立营销-商品关联关系,甚至需要做其他耗时处理(比如打标签)。如此一来,服务层接口很可能会产生超时(默认5000ms)异常,应用层无法得知数据是否保存成功。

  问题来了:如何最大程度保证「导入结果」与「数据库」数据一致性?

  我们的解决方案是查询服务层,校验数据是否落库。查询的时机可以根据业务场景决定,由于整个「导入」是异步进行,本身对时效并不严格,我们决定在批量(多线程)保存结束后,再用超时的数据作为入参批量查询服务层作为校验手段。(超时情况如何获得入参,请参考Future-异常的处理

补偿模式