V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX  ›  Java

提问后台简单调用第三方 api 轮询实现方式

  •  
  •   rqxiao · 34 天前 · 951 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    交易请求发起后,若顾客需要输入密码,则此时系统会返回交易处理中的应答。需要商 户主动调用查询接口,获取交易状态。根据交易场景的不同,查询的方式有不同选择。建议 线下场景使用轮询的方式,例如 5s 一次,查询 50s 。

    这单返回成功了就不需要再查了。目前想法 springboot 里写一个 @Scheduled 定时任务,第一次如果不是成功就放在一个 map 里( key 是订单 id ),查到成功就删除 map 里面的这个 key ?

    有可能后期同时下单的数量会比较多

    第 1 条附言  ·  33 天前
    rabbitmq 项目里是有,但是轮询 10 次,5s 一次,这个 mq 可以实现的吗?
    7 条回复    2020-10-27 14:15:09 +08:00
    wsyw126
        1
    wsyw126   34 天前
    如果不成功放在 map,如果宕机了,这些不成功的订单 id 就丢失了。
    coderxy
        2
    coderxy   34 天前
    可以放 rabbitmq 里,做个延时队列。 或者放到 redis 里, 你放内存里服务挂了就没了。
    dzdh
        3
    dzdh   34 天前
    消息队列 release
    Jrue0011
        4
    Jrue0011   34 天前
    不引入新的中间件的话,一般应该是数据库有个日志表,然后起个定时任务扫表?
    fallinlovewith
        5
    fallinlovewith   34 天前
    @Jrue0011 Quartz?
    kanepan19
        6
    kanepan19   33 天前
    简单实现: 下单后 用 delayqueue 或者 ScheduledExecutorService
    如果重启的话, 从数据库读取未处理的, 再丢入定时任务.

    引入其他组件: 2 楼的 rabbitmq 延时队列或者 redis
    w292614191
        7
    w292614191   33 天前
    你应该有个独立的服务来不断的查询交易表,完成的就更新。其他业务只要查询就可以了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   5085 人在线   最高记录 5268   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:26 · PVG 10:26 · LAX 18:26 · JFK 21:26
    ♥ Do have faith in what you're doing.