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

2020-10-27 10:01:31 +08:00
 rqxiao

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

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

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

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

引入其他组件: 2 楼的 rabbitmq 延时队列或者 redis
w292614191
2020-10-27 14:15:09 +08:00
你应该有个独立的服务来不断的查询交易表,完成的就更新。其他业务只要查询就可以了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/718905

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX