700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 秒杀情况下 用户下单扣除库存创建订单之后 迟迟不付款 时间到了自动取消订单(思路)

秒杀情况下 用户下单扣除库存创建订单之后 迟迟不付款 时间到了自动取消订单(思路)

时间:2019-11-29 17:11:08

相关推荐

秒杀情况下 用户下单扣除库存创建订单之后 迟迟不付款 时间到了自动取消订单(思路)

秒杀情况下,用户下单扣除库存创建订单之后,迟迟不付款,时间到了自动取消订单

解决方案1. 使用redis实现

1.下单之后把生成分布式全局唯一id,把订单id放进redis中,设置一个过期时间

2.定义一个redis监听器,监听所有的key,一旦有key过期,就会调用实现的方法

public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {@Autowiredprivate PayOrderTimeoutService payOrderTimeoutService;public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}/*** 针对 redis 数据失效事件,进行数据处理** @param message* @param pattern*/@Overridepublic void onMessage(Message message, byte[] pattern) {// redis 客户端监听 Redis 16库 每个库对应不同的业务逻辑 前缀 order_timeOut_支付idString key = message.toString();//获取到失效的key,根据业务需要对这个key进行处理,例如删除订单,返还库存等操作log.info(">key:{}已经过期!<", key);Long payId = Long.parseLong(key);payOrderTimeoutService.orderTimeout(payId);}}

解决方案2,使用rabbitmq的ttl和死信队列实现

1.创建一个正常队列,绑定一个死信队列,给正常队列设置一个ttl,里面的消息超过这个ttl就会进入死信队列

2.创建订单扣库存之后向正常的队列发送一条消息,消息体是订单对象的json字符串

3.让专门一个消费者监听该死信队列进行消费,消费到的消息说明ttl时间到了,然后把消息里面的订单取消掉

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。