CN117350810A - 一种订单超时未支付自动取消方法、存储介质及设备 - Google Patents
一种订单超时未支付自动取消方法、存储介质及设备 Download PDFInfo
- Publication number
- CN117350810A CN117350810A CN202311323318.9A CN202311323318A CN117350810A CN 117350810 A CN117350810 A CN 117350810A CN 202311323318 A CN202311323318 A CN 202311323318A CN 117350810 A CN117350810 A CN 117350810A
- Authority
- CN
- China
- Prior art keywords
- task
- order
- queue
- unpaid
- cancellation method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000012544 monitoring process Methods 0.000 claims abstract description 10
- 238000012545 processing Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
- G06Q30/0635—Processing of requisition or of purchase orders
- G06Q30/0637—Approvals
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种订单超时未支付自动取消方法、存储介质及设备,所述方法包括以下步骤:根据用户下单信息生成订单,根据所生成的订单向用户端反馈待支付指令;生成订单的同时,创建具有绝对时间点的任务;将任务放入延迟队列中,该延迟队列为按绝对时间点先后排序的队列,基于Redis的过期机制以及监听API对各任务进行监听;在当前时间大于等于延迟队列中首条任务的绝对时间点时,将任务放入消费队列;当监听到消费队列中有任务时,则获取到消费队列中的任务,修改任务对应订单的状态为已取消;若在还未到绝对时间点时接收到订单的支付完成指令,则修改对应订单的状态为已完成。与现有技术相比,本发明具有减少对数据库频繁操作、时间准确度高等优点。
Description
技术领域
本发明涉及微服务架构下java技术领域,涉及一种订单处理方法,尤其是涉及一种订单超时未支付自动取消方法、存储介质及设备。
背景技术
在电商项目中,经常会碰到订单超时未支付的问题,电商平台下单后,如果超过一定的时间还未支付,系统向用户发起支付提醒,如果提醒后用户仍未支付自动将订单设置为超时自动取消,从而释放绑定的资源。但目前对于订单的超时自动取消处理过程还存在以下问题:
(1)现有技术需要不断的去查询数据库,频繁的进行I/O。假设订单有几千万条,每隔几分钟扫描一次,数据库损耗极大。
(2)在分布式多个节点同时运行的情况下,可能会出校重复执行的情况。
(3)存在延迟,比如每隔3分钟扫描一次,那最坏的延迟时间就是3分钟。
(4)对服务器内存消耗大。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种减少对数据库频繁操作、时间准确度高的订单超时未支付自动取消方法、存储介质及设备。
本发明的目的可以通过以下技术方案来实现:
一种订单超时未支付自动取消方法,包括以下步骤:
根据用户下单信息生成订单,根据所生成的订单向用户端反馈待支付指令;
生成所述订单的同时,创建一具有绝对时间点的任务;
将所述任务放入一延迟队列中,该延迟队列为按绝对时间点先后排序的队列,基于Redis的过期机制以及监听API对各任务进行监听,判断当前时间是否大于等于延迟队列中首条任务的绝对时间点;
在当前时间大于等于所述延迟队列中首条任务的绝对时间点时,将任务放入消费队列;
对消费队列进行监听,当监听到消费队列中有任务时,则获取到消费队列中的任务,修改任务对应订单的状态为已取消;
若在还未到所述绝对时间点时接收到订单的支付完成指令,则修改对应订单的状态为已完成,并将该订单对应的任务从所述延迟队列中删除。
进一步地,所述任务存储在Redis中,形成任务池,任务池中设置多个任务桶,各任务桶中分配若干任务量,通过轮询方式实现各任务的处理。
进一步地,基于分布式锁实现所述轮询。
进一步地,所述消费队列基于Kafka中间件或Redis中间件实现。
进一步地,所述任务放入消费队列成功之后,删除延迟队列中的对应任务。
进一步地,所述绝对时间点为当前时间与设定超时时间的和。
进一步地,所述设定超时时间为30分钟。
进一步地,所述延迟队列基于Redis的ZSet数据结构实现。
本发明还提供一种存储介质,其上存储有程序,所述程序被执行时实现如上所述的订单超时未支付自动取消方法。
本发明还提供一种电子设备,包括存储器、处理器,以及存储于所述存储器中的程序,所述处理器执行所述程序时实现如上所述的订单超时未支付自动取消方法
与现有技术相比,本发明具有以下有益效果:
1、本发明的订单处理过程中,基于消息通知机制,将任务的投递与执行分离,实现解耦,能够减少不必要的数据库I/O查询,减少对数据库的频繁操作,避免资源无效占用,提高效率。
2、本发明的延迟队列基于redis实现,利用redis集群轻易进行横向扩展,实现任务的高效处理,时间准确度高。
3、轮询多个任务桶的时候利用简单分布式锁来保证多个时间循环处理时候不会出现重复,防止消息的重复投递。
4、本发明的任务都存储在redis中,如果程序处理失败或者任务处理程序挂了,重启之后,还有重新处理数据的可能性。
附图说明
图1为本发明的流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,本实施例提供一种订单超时未支付自动取消方法,包括以下步骤:
在步骤S101中,根据用户下单信息生成订单;
在步骤S102中,根据所生成的订单向用户端反馈待支付指令;
在步骤S103中,在获取到步骤S101生成的订单的同时,创建一具有绝对时间点的任务,所述绝对时间点为当前时间与设定超时时间的和;
在步骤S104中,将所述任务放入到延迟队列中,形成定时任务扫描业务表,该延迟队列为按绝对时间点先后排序的队列,基于Redis的过期机制以及监听API(KeyExpiration Event Message Listener)对各任务进行监听并接手,判断当前时间是否大于等于延迟队列中首条任务的绝对时间点,如果是,则说明任务的执行时间点到了,则执行步骤S105;
在步骤S105中,将任务放入消费队列,放入消费队列成功之后,删除延迟队列中的任务;同时对消费队列进行监听,当监听到消费队列中有任务时,则获取到消费队列中的任务进行消费,修改任务对应订单的状态为已取消;
在步骤S106中,若在还未到所述绝对时间点时接收到订单的支付完成指令,则修改对应订单的状态为已完成,并将该订单对应的任务从所述延迟队列中删除。
上述步骤S104中,基于Redis的过期机制以及监听API进行任务的监听和处理,以实现延迟功能。将任务存储在redis中,形成任务池,任务池中设置多个任务桶,各任务桶中分配若干任务量。进行监听时,通过轮询器实现。轮询器轮询多个任务桶的时候可以使用redis的setnx锁来保证多个时间循环处理时候不会出现重复,利用简单分布式锁可以实现防止消息的重复投递。
上述步骤S104中,延迟队列采用Redis的ZSet数据结构进行实现,以订单号作为KEY,绝对时间点作为分数。
上述步骤S105中,所采用的消费队列多样化,如可以使用Kafka,Redis等中间件实现对队列中的数据进行消费。
在具体实施方式中,设定超时时间可以为30分钟,或者根据需要设置其他时间。
上述订单处理过程中,基于消息通知机制,将任务的投递与执行分离,实现解耦,能够减少不必要的数据库I/O查询。
上述延迟队列基于redis实现,利用redis集群轻易进行横向扩展,实现任务的高效处理,时间准确度高,且任务都存储在redis中,如果程序处理失败或者任务处理程序挂了,重启之后,还有重新处理数据的可能性。
上述方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在另一个实施方式中,可以提供一种电子设备,该电子设备包括一个或多个处理器、存储器和被存储在存储器中的一个或多个程序,所述一个或多个程序包括用于执行如上所述订单超时未支付自动取消方法的指令。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本发明实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言Java和直译式脚本语言JavaScript等。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (10)
1.一种订单超时未支付自动取消方法,其特征在于,包括以下步骤:
根据用户下单信息生成订单,根据所生成的订单向用户端反馈待支付指令;
生成所述订单的同时,创建一具有绝对时间点的任务;
将所述任务放入一延迟队列中,该延迟队列为按绝对时间点先后排序的队列,基于Redis的过期机制以及监听API对各任务进行监听,判断当前时间是否大于等于延迟队列中首条任务的绝对时间点;
在当前时间大于等于所述延迟队列中首条任务的绝对时间点时,将任务放入消费队列;
对消费队列进行监听,当监听到消费队列中有任务时,则获取到消费队列中的任务,修改任务对应订单的状态为已取消;
若在还未到所述绝对时间点时接收到订单的支付完成指令,则修改对应订单的状态为已完成,并将该订单对应的任务从所述延迟队列中删除。
2.根据权利要求1所述的订单超时未支付自动取消方法,其特征在于,所述任务存储在Redis中,形成任务池,任务池中设置多个任务桶,各任务桶中分配若干任务量,通过轮询方式实现各任务的处理。
3.根据权利要求2所述的订单超时未支付自动取消方法,其特征在于,基于分布式锁实现所述轮询。
4.根据权利要求1所述的订单超时未支付自动取消方法,其特征在于,所述消费队列基于Kafka中间件或Redis中间件实现。
5.根据权利要求1所述的订单超时未支付自动取消方法,其特征在于,所述任务放入消费队列成功之后,删除延迟队列中的对应任务。
6.根据权利要求1所述的订单超时未支付自动取消方法,其特征在于,所述绝对时间点为当前时间与设定超时时间的和。
7.根据权利要求6所述的订单超时未支付自动取消方法,其特征在于,所述设定超时时间为30分钟。
8.根据权利要求1所述的订单超时未支付自动取消方法,其特征在于,所述延迟队列基于Redis的ZSet数据结构实现。
9.一种存储介质,其上存储有程序,其特征在于,所述程序被执行时实现如权利要求1-8中任一所述的订单超时未支付自动取消方法。
10.一种电子设备,包括存储器、处理器,以及存储于所述存储器中的程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-8中任一所述的订单超时未支付自动取消方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311323318.9A CN117350810A (zh) | 2023-10-13 | 2023-10-13 | 一种订单超时未支付自动取消方法、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311323318.9A CN117350810A (zh) | 2023-10-13 | 2023-10-13 | 一种订单超时未支付自动取消方法、存储介质及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117350810A true CN117350810A (zh) | 2024-01-05 |
Family
ID=89362565
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311323318.9A Pending CN117350810A (zh) | 2023-10-13 | 2023-10-13 | 一种订单超时未支付自动取消方法、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117350810A (zh) |
-
2023
- 2023-10-13 CN CN202311323318.9A patent/CN117350810A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109271417B (zh) | 一种基于数据库的轻量级消息队列实现方法及存储设备 | |
CN109901918B (zh) | 一种处理超时任务的方法和装置 | |
CN111245900B (zh) | 一种分布式消息发送的处理系统及其处理方法 | |
CN109450987B (zh) | 编号生成方法、装置及系统和存储介质 | |
CN111835467B (zh) | 消息发送方法、装置、计算机设备和存储介质 | |
CN111274052A (zh) | 数据分发方法、服务器及计算机可读存储介质 | |
CN111818117A (zh) | 数据更新的方法、装置、存储介质及电子设备 | |
CN106407021A (zh) | 一种基于队列的业务请求处理方法 | |
CN117350810A (zh) | 一种订单超时未支付自动取消方法、存储介质及设备 | |
CN112948081A (zh) | 延时处理任务的方法、装置、设备以及存储介质 | |
CN109245941B (zh) | 一种服务补偿方法及装置 | |
CN114265845A (zh) | 一种延时任务的处理方法、装置和电子设备 | |
CN112596761B (zh) | 服务的更新发布方法、装置及相关设备 | |
CN115333942A (zh) | 事件重试方法及装置、存储介质及电子设备 | |
CN114186966A (zh) | 公文审批方法、系统、装置及计算机可读存储介质 | |
CN115131067A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN113590591B (zh) | 事件状态的自动更新方法、装置、设备及存储介质 | |
CN115269161B (zh) | 一种异常流程逆向回滚方法和系统 | |
CN113821327A (zh) | 一种实例调度方法、系统及计算设备 | |
US7703100B2 (en) | Modified auto remote agent for job scheduling and management applications | |
CN116991599A (zh) | 延时队列的实现方法、装置、计算机可读介质及电子设备 | |
CN113590314A (zh) | 网络请求数据处理方法和系统 | |
CN116643733B (zh) | 业务处理系统和方法 | |
CN114884973B (zh) | 一种车辆定位数据的批量注册方法、装置及存储介质 | |
CN115617541A (zh) | 通信方法及事件中枢调度系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |