交易请求发起后,若顾客需要输入密码,则此时系统会返回交易处理中的应答。需要商 户主动调用查询接口,获取交易状态。根据交易场景的不同,查询的方式有不同选择。建议 线下场景使用轮询的方式,例如 5s 一次,查询 50s 。
这单返回成功了就不需要再查了。目前想法 springboot 里写一个 @Scheduled 定时任务,第一次如果不是成功就放在一个 map 里( key 是订单 id ),查到成功就删除 map 里面的这个 key ?
有可能后期同时下单的数量会比较多
1
wsyw126 2020-10-27 10:13:19 +08:00
如果不成功放在 map,如果宕机了,这些不成功的订单 id 就丢失了。
|
2
coderxy 2020-10-27 10:14:48 +08:00
可以放 rabbitmq 里,做个延时队列。 或者放到 redis 里, 你放内存里服务挂了就没了。
|
3
dzdh 2020-10-27 10:15:17 +08:00
消息队列 release
|
4
Jrue0011 2020-10-27 10:17:15 +08:00
不引入新的中间件的话,一般应该是数据库有个日志表,然后起个定时任务扫表?
|
5
fallinlovewith 2020-10-27 10:21:14 +08:00
@Jrue0011 Quartz?
|
6
kanepan19 2020-10-27 10:30:47 +08:00
简单实现: 下单后 用 delayqueue 或者 ScheduledExecutorService
如果重启的话, 从数据库读取未处理的, 再丢入定时任务. 引入其他组件: 2 楼的 rabbitmq 延时队列或者 redis |
7
w292614191 2020-10-27 14:15:09 +08:00
你应该有个独立的服务来不断的查询交易表,完成的就更新。其他业务只要查询就可以了。
|