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

场景:

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

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

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

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

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

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

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

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

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

使用MQ发送一个事务消息,利用消息的状态回查机制来替代定时的任务。

在下单时,给 Broker 返回一个 UNKNOW 的未知状态,在状态回查的方法中去查询订单的支付状态。

我们只需要配置 RocketMQ 中的事务消息回查次数和事务回查间隔时间,就可以完成这个支付状态检查的需求。这样整个业务逻辑就会简单很多。

你可能感兴趣的:(other,java)