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

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

  •  
  •   rqxiao · 2020-10-27 10:01:31 +08:00 · 1984 次点击
    这是一个创建于 1470 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    引入其他组件: 2 楼的 rabbitmq 延时队列或者 redis
    w292614191
        7
    w292614191  
       2020-10-27 14:15:09 +08:00
    你应该有个独立的服务来不断的查询交易表,完成的就更新。其他业务只要查询就可以了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1245 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:11 · PVG 07:11 · LAX 15:11 · JFK 18:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.