rqxiao
V2EX  ›  Java

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

  •  
  •   rqxiao · Oct 27, 2020 · 3003 views
    This topic created in 2207 days ago, the information mentioned may be changed or developed.

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

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

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

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

    引入其他组件: 2 楼的 rabbitmq 延时队列或者 redis
    w292614191
    w292614191
    Oct 27, 2020
    7
    你应该有个独立的服务来不断的查询交易表,完成的就更新。其他业务只要查询就可以了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3354 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:11 · PVG 18:11 · LAX 02:11 · JFK 05:11
    ♥ Do have faith in what you're doing.