游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

如何实现类似订单到期未支付自动关闭的功能?这6种方案任你挑选

  我们在电商平台购物时,下单之后会有一个付款倒计时,如果在规定的时间内未付款,订单就会自动关闭。
  类似这样的场景还有很多,比如优惠劵到期失效,下单后自动发消息等。
  今天我们来讨论一下,要实现诸如此类的功能,都有哪些技术方案,这些方案的优缺点是什么。需要说明的是,以下这些方案每一种都有其适用场景,并无绝对优劣之分。1,定时任务
  通过定时任务关闭订单,是一种成本很低,实现也很容易的方案。通过简单的几行代码,写一个定时任务,定期扫描数据库中的订单,如果时间过期,就将其状态更新为关闭即可。
  优点:实现容易,成本低,基本不依赖其他组件。
  缺点:时间可能不够精确。由于定时任务扫描的间隔是固定的,所以可能造成一些订单已经过期了一段时间才被扫描到,订单关闭的时间比正常时间晚一些。增加了数据库的压力。随着订单的数量越来越多,扫描的成本也会越来越大,执行时间也会被拉长,可能导致某些应该被关闭的订单迟迟没有被关闭。
  总结:采用定时任务的方案比较适合对时间要求不是很敏感,并且数据量不太多的业务场景。
  2,JDK延迟队列DelayQueue
  DelayQueue是JDK提供的一个无界队列,我们可以看到,DelayQueue队列中的元素需要实现Delayed,它只提供了一个方法,就是获取过期时间。
  用户的订单生成以后,设置过期时间比如30分钟,放入定义好的DelayQueue,然后创建一个线程,在线程中通过while(true)不断的从DelayQueue中获取过期的数据。
  优点:不依赖任何第三方组件,连数据库也不需要了,实现起来也方便。
  缺点:因为DelayQueue是一个无界队列,如果放入的订单过多,会造成JVMOOM。DelayQueue基于JVM内存,如果JVM重启了,那所有数据就丢失了。
  总结:DelayQueue适用于数据量较小,且丢失也不影响主业务的场景,比如内部系统的一些非重要通知,就算丢失,也不会有太大影响。
  3,redis过期监听
  redis是一个高性能的KV数据库,除了用作缓存以外,其实还提供了过期监听的功能。
  在redis。conf中,配置notifykeyspaceeventsEx即可开启此功能。
  然后在代码中继承KeyspaceEventMessageListener,实现onMessage就可以监听过期的数据量。publicabstractclassKeyspaceEventMessageListenerimplementsMessageListener,InitializingBean,DisposableBean{privatestaticfinalTopicTOPICALLKEYEVENTSnewPatternTopic(keyevent);。。。省略部分代码publicvoidinit(){if(StringUtils。hasText(keyspaceNotificationsConfigParameter)){RedisConnectionconnectionlistenerContainer。getConnectionFactory()。getConnection();try{Propertiesconfigconnection。getConfig(notifykeyspaceevents);if(!StringUtils。hasText(config。getProperty(notifykeyspaceevents))){connection。setConfig(notifykeyspaceevents,keyspaceNotificationsConfigParameter);}}finally{connection。close();}}doRegister(listenerContainer);}protectedvoiddoRegister(RedisMessageListenerContainercontainer){listenerContainer。addMessageListener(this,TOPICALLKEYEVENTS);}。。。省略部分代码OverridepublicvoidafterPropertiesSet()throwsException{init();}}
  通过以上源码,我们可以发现,其本质也是注册一个listener,利用redis的发布订阅,当key过期时,发布过期消息(key)到Channel:keyevent:expired中。
  在实际的业务中,我们可以将订单的过期时间设置比如30分钟,然后放入到redis。30分钟之后,就可以消费这个key,然后做一些业务上的后置动作,比如检查用户是否支付。
  优点:由于redis的高性能,所以我们在设置key,或者消费key时,速度上是可以保证的。
  缺点:由于redis的key过期策略原因,当一个key过期时,redis无法保证立刻将其删除,自然我们的监听事件也无法第一时间消费到这个key,所以会存在一定的延迟。另外,在redis5。0之前,订阅发布中的消息并没有被持久化,自然也没有所谓的确认机制。所以一旦消费消息的过程中我们的客户端发生了宕机,这条消息就彻底丢失了。
  总结:redis的过期订阅相比于其他方案没有太大的优势,在实际生产环境中,用得相对较少。
  4,Redisson分布式延迟队列RDelayedQueue
  Redisson是一个基于redis实现的Java驻内存数据网格,它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。
  Redisson除了提供我们常用的分布式锁外,还提供了一个分布式延迟队列RDelayedQueue,他是一种基于zset结构实现的延迟队列,其实现类是RedissonDelayedQueue。
  优点:使用简单,并且其实现类中大量使用lua脚本保证其原子性,不会有并发重复问题。
  缺点:需要依赖redis(如果这算一种缺点的话)。
  总结:Redisson是redis官方推荐的JAVA客户端,提供了很多常用的功能,使用简单、高效,推荐大家尝试使用。
  5,RocketMQ延迟消息
  延迟消息,当消息写入到Broker后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。
  在订单创建之后,我们就可以把订单作为一条消息投递到rocketmq,并将延迟时间设置为30分钟,这样,30分钟后我们定义的consumer就可以消费到这条消息,然后检查用户是否支付了这个订单。
  通过延迟消息,我们就可以将业务解耦,极大地简化我们的代码逻辑。
  优点:可以使代码逻辑清晰,系统之间完全解耦,只需关注生产及消费消息即可。另外其吞吐量极高,最多可以支撑万亿级的数据量。
  缺点:相对来说mq是重量级的组件,引入mq之后,随之而来的消息丢失、幂等性问题等都加深了系统的复杂度。
  总结:通过mq进行系统业务解耦,以及对系统性能削峰填谷已经是当前高性能系统的标配。
  6,RabbitMQ死信队列
  除了RocketMQ的延迟队列,RabbitMQ的死信队列也可以实现消息延迟功能。
  当RabbitMQ中的一条正常消息,因为过了存活时间(TTL过期)、队列长度超限、被消费者拒绝等原因无法被消费时,就会被当成一条死信消息,投递到死信队列。
  基于这样的机制,我们可以给消息设置一个ttl,然后故意不消费消息,等消息过期就会进入死信队列,我们再消费死信队列即可。
  通过这样的方式,就可以达到同RocketMQ延迟消息一样的效果。
  优点:同RocketMQ一样,RabbitMQ同样可以使业务解耦,基于其集群的扩展性,也可以实现高可用、高性能的目标。
  缺点:死信队列本质还是一个队列,队列都是先进先出,如果队头的消息过期时间比较长,就会导致后面过期的消息无法得到及时消费,造成消息阻塞。
  总结:除了增加系统复杂度之外,死信队列的阻塞问题也是需要我们重点关注的。
  最后
  本文介绍了常见的6种实现订单关闭的方案,不同的方案都有其适用的场景,各自的优缺点也不尽相同,大家可以根据自己的业务场景,选择合适的方案。
  如果本文中没有提到你熟悉的技术方案,也欢迎在评论区分享给大家,期待共同学习进步。
  头条创作挑战赛
  写文不易,朋友们帮忙点点赞和关注吧,谢谢。

比特币挖矿成本上涨意味着比特币矿工在第三季度难以获利2022年第三季度对海外的比特币挖矿运营商来说没有任何好处。北美和欧洲的能源问题以及当前的虚拟货币市场状况为虚拟货币带来了噩耗,比特币行情的下跌叫停很多矿工。哈希率指数最……原神甘雨和魈哪个更值得抽2。4版本复刻池抽谁比较好原神距离原神的2。4版本的推出大概还有一个星期左右,各个推测视频想必大家也都看过一遍,应该有了初步的抽卡计划了吧。但,一定还有些朋友在犹豫,到底在这次的复刻池中抽甘雨还是……50岁以后,身体上5个部位咔咔作响,或是老年病登门,要警惕什么是老年病?老年病是老年人的特发疾病和常见疾病,包括老年痴呆症、糖尿病、高血压、脑卒中、冠心病、肥胖症、风湿、骨质疏松、皮肤病、肿瘤、癌症、青光眼、白内障、视网膜病变等多种疾……前端工程师常见面试题(前端进阶)前端工程化Babel的原理是什么?参考回答:babel的转译过程也分为三个阶段,这三步具体是:o解析Parse:将代码解析生成抽象语法树(即AST),即词法分析与语法分……若睡觉时出现了这3大症状,或是体内血糖升高的表现,最好警惕近年来,随着人们饮食的不断改变,除了常见的高血压以外,高血糖和高血脂也是越来越普遍,尤其是高血糖。对于高血糖患者来说,在平日里一定要时刻注意自身血糖水平的变化,因为一旦我们体内……5项决赛出炉!国羽提前夺2冠最多4冠,连续第2个比赛日保持全北京时间10月23日消息,2022年丹麦羽毛球公开赛5项决赛全部出炉!除了男双,国羽在其余4个单项全部杀进决赛,并且,国羽还提前夺得了2冠,混双和女单均会师决赛包揽了冠亚军,理……担心高端旗舰性价比不高?这3款中端手机值得入手虽然现在的手机厂商都去冲高端市场了,但是不可否认,中端机的用户还是大部分。而且现在的中端手机以其不高的价格和令人惊喜的配置(很多旗舰配置都下放了)赢得很多用户的青睐。所以……散文银龙飞舞如果化作鸟儿,插上一双翅膀,俯瞰大地,就会看到大地上四通八达、密密疏疏的铁路网,或集成于城市,或散落于山野,或零星地孑立于河流,或独自横卧于山间无论崎岖还是平坦,无论是山川还是……古城西安游寻访十一月长安城里的古风十一月的西安并非旅游旺季,相比寒暑假与各种假期时的人潮鼎沸,好在古城的风韵在我眼里,并不随着季节的更替而有所不同,千百年的树木与城墙在城中交错,亦为古城披上了斑斓的秋衣,长风越……更沉浸的聆听来自汪峰团队调校FIILCCPro体验分享在大多数旗舰手机开始跟风苹果取消3。5mm耳机接口以后,有线耳机已经成为了科技发展的殉葬品。我很佩服那些买了转接头仍然坚持使用有线耳机的用户,当你从包里掏出乱如麻团的耳机,花费……杨玖易2023兔年推荐好听的女宝宝名字2023年是农历的兔年,兔子代表的是聪明、灵活、诚实、善良和温柔。为了祝福新生儿拥有兔子般聪明、灵活、善良的性格特质,也给小孩取一个吉祥、美好的名字。【杨玖易】2023兔……从行星运行轨道到引力弹弓张朝阳论证藏在流浪地球2的物理知识《流浪地球2》中,地球通过引力弹弓效应逃离太阳系的情节让观众叹为观止,但其实这并不是凭空想象。1月27日,搜狐创始人、董事局主席兼CEO张朝阳针对这一话题,在其《张朝阳的物理课……
广汽传祺GS4销量那么高,质量到底怎么样啊?有什么过人之处?广汽传祺GS4新车指导价:9。9816。18万元一、外观优势超高的颜值!国产suv中数一数二的好看!比哈弗H6、宝骏560、瑞腾、启辰T70都好看,也最大气。……广汽传祺GS4销量那么高,质量到底怎么样啊?有什么过人之处?广汽传祺GS4新车指导价:9。9816。18万元一、外观优势超高的颜值!国产suv中数一数二的好看!比哈弗H6、宝骏560、瑞腾、启辰T70都好看,也最大气。……有人说丰田车质量很好,买了以后想换车很难,对此你有什么看法?丰田的质量确实是比较稳定可靠的,也就是可靠性高,不容易坏。因为丰田的汽车大多数结构比较简单,可能没有什么太新的技术,但是比较稳定可靠,这是丰田一贯的理念。当然,TNGA架构下的……奶奶衫西装靠边站,今年流行的针织小背心,小个子要会穿对于爱美的女生来说,一天的好心情要靠穿衣打扮来开启,用时尚优雅的着装迎接每一个早晨,在这个春季遇见更好的自己。就算因为身高问题而困扰,也要将自己拾掇得漂漂亮亮,像今春流行……五羊本田脱离了本田,会有豪爵质量好吗?专业解析摩托车故障,精准推荐所需车型。大家好,我是骑士分享欢迎您的关注!五羊本田脱离了本田,会有豪爵的质量吗?这个问题的前提条件一定是假设,因为五羊本田是不可能离开本田的……日产轩逸最低价多少钱,和丰田卡罗拉比哪个质量好?日产轩逸没有更新换代,最低价为2016款经典1。6XE手动舒适版9。98万,国内不同地方有不同的降价,在汽车之家上查到最低为7。58万元,请看下图。至于轩逸和丰田卡罗拉哪……颜值党的全新潮流单品,华为nova10系列手机震撼来袭6月24日,华为在官方微博上发布了nova10系列新品的第二张预热海报。以千玺手持的方式展示了nova10系列的庐山真面目。值得一提的是,此番首次亮相的银色表现出与前代产品截然……为什么今年车险三者保险公司都推销200万的?我来回答你这就是保险精算的魅力。为什么这么说呢?大家会发现。100万和200万之间相差不是特别大的,也就100块钱左右吧这个也涉及到一个概率的问题。大家想一想,在我们赔偿第三者……中老年男人的眉毛变长,意味着什么?说明长寿吗?原因要心里有数你发现了吗,在仙侠剧里,老仙人的眉毛总是很长,给人一种仙气十足的感觉。现实生活中,许多老人也留有长长的眉毛,于是乎,长眉成为了长寿、福气的象征。那么,这些说法到底是真是假……电动三轮车办证上牌得多少钱,各地情况有何不同?电动三轮车真的能上牌吗?其实只要你的电动车符合新规完全是可以上牌的。电动车上牌现阶段有两种,一种就是为了加强管理儿而上的管理牌这种牌照所需的费用不多一般情况下也就在200块钱之……原来这才是缺乏维生素的罪魁祸首!补救方法现如今吃得更好了,但很多人却依然营养不良,尤其是缺乏代谢时必需的维生素。据统计,目前有超过80的中国居民,维生素B1和维生素B2摄入不足,另外还普遍缺乏维生素A与维生素D。……现金补贴如何稳就业与促消费?新冠疫情已持续三年有余,全球经济总体上经历了疫情暴发时的重挫、扩张性政策刺激后的恢复、刺激后的高通胀与快速加息等过程,正迈向从滞胀到衰退的阶段。在此过程中,不同经济体采取了不同……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网