如何使用定时器获取订单状态

小w
  1. 业务:

在我们平台发起一笔三方服务的订单,成功后三方接口返回订单号,然后通过三方提供的订单状态查询接口b,查询订单状态。

  1. 订单状态

三方订单有大约6中不同状态,每个状态变化时间不确定,有可能1秒,有可能30分钟

  1. 我们平台的需求

获取三方订单的所有状态和对应时间,并存储数据库


有什么好的方案,目前只想到用定时器或者定时任务每秒查一次,存储数据库,但是每秒存储数据库压力有点大,再一个就是动态创建定时器后,链接就断开了,会不会造成性能或内存问题?

请问大佬们有什么好的方案,谢谢

阅读 144
1个回答

chaz6chez
  1. 你的这个问题应该是具体业务的,和workerman及生态没太大关系
  2. 业务中,你们请求第三方是同步执行并获得订单号还是异步?
  3. 一般的第三方都会有回调通知接口,比如订单创建成功会回调通知你方,订单状态更新,会通知你方,如果没有这样的实现,那么只能通过爬模式,也就是你方主动请求其服务器更新你方的订单状态。
  4. 主动更新订单状态的这种方式对你方服务不友好,对他方服务也同样不友好,我个人认为一般情况下没有这种纯爬模式的服务,一般都会推爬结合;如果实在没有推送模式,那么只有定时器执行,批量的去查询订单的状态,且批量更新;如果没有批量查询请求,我觉得这个服务设计的是失败的。
  • 小w 10天前

    确实第三方没有通知我们,只有三方的下单和查询接口,第三方明确说可以一直请求

  • chaz6chez 10天前

    为了避免频繁查库,其实可以把未更新的订单抛入到队列,消费者一直请求第三方,既然第三方明确了无所谓,那就用这种方式,非常暴力

  • 小w 10天前

    目前使用动态添加Timer方式,每来一个订单起一个Timer,每秒去查下状态,更新数据库,这样我们这边存储压力比较大,该如何改造

  • chaz6chez 10天前

    储存有什么压力?你指update?另外一个订单一个timer,如果第三方服务器炸了,你们timer会有累积

  • 小w 10天前

    对,每个订单1秒update一次压力也不小

  • chaz6chez 10天前

    不管用什么,你的订单都要update,除非他们返回订单的时候就告知了状态,这样你insert的时候直接插入对应的状态就好了