场景:
在订单场景下,通常要求下单完成后,用户在一定时间内支付成功,支付完成后才会通知下游服务。
方案一:在不使用事务消息的情况下实现
最简单的方式是启动一个定时任务或轮询的方式,每隔一段时间扫描订单表,比对未支付的订单的下单时间,将超过时间的订单回收。
这种方式每次都需要扫描庞大的订单信息,这对系统造成了不小的压力。
方案二:使用RocketMQ提供的延迟消息机制
往MQ发一个延迟消息,消费到这个消息后去检查订单的支付状态,如果订单已经支付,就往下游发送下单的通知。
如果没有支付,就再发一个延迟消息。当达到指定次数后依旧,则把订单回收。
这个方案就不用对全部的订单表进行扫描,而只需要每次处理一个单独的订单消息。
方案二:使用上了事务消息