天天看点

订单下单成功后如何等待支付成功

场景:

在订单场景下,通常要求下单完成后,用户在一定时间内支付成功,支付完成后才会通知下游服务。

方案一:在不使用事务消息的情况下实现

最简单的方式是启动一个定时任务或轮询的方式,每隔一段时间扫描订单表,比对未支付的订单的下单时间,将超过时间的订单回收。

这种方式每次都需要扫描庞大的订单信息,这对系统造成了不小的压力。

方案二:使用RocketMQ提供的延迟消息机制

往MQ发一个延迟消息,消费到这个消息后去检查订单的支付状态,如果订单已经支付,就往下游发送下单的通知。

如果没有支付,就再发一个延迟消息。当达到指定次数后依旧,则把订单回收。

这个方案就不用对全部的订单表进行扫描,而只需要每次处理一个单独的订单消息。

方案二:使用上了事务消息