CN111225041B - 一种实现延时消息队列的方法及系统 - Google Patents
一种实现延时消息队列的方法及系统 Download PDFInfo
- Publication number
- CN111225041B CN111225041B CN201911369004.6A CN201911369004A CN111225041B CN 111225041 B CN111225041 B CN 111225041B CN 201911369004 A CN201911369004 A CN 201911369004A CN 111225041 B CN111225041 B CN 111225041B
- Authority
- CN
- China
- Prior art keywords
- message
- delay
- server module
- record
- module
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种实现延时消息队列的方法及系统,客户端模块发送消息至服务端模块内,服务端模块将消息写入到关系数据库内进行存储;服务端模块判定消息的到期时间大于当前服务器的时间,并生成一条延时消息记录;服务端模块将延时消息记录写入到内存数据库中的延时消息队列内,并周期性轮询延时消息队列;客户端模块向服务端模块拉取延时消息记录,服务端模块检查延时消息队列,并读取关系数据库内的消息内容,反馈给客户端模块;客户端模块接收消息内容,并发送ACK至服务端模块,显示消息已成功收到。本发明采用扩展策略,支持需要延时消息的各种业务场景,充分利用现有消息队列系统的功能实现零侵入,避免了修改原消息队列系统带来的风险。
Description
技术领域
本发明涉及分布式服务技术领域,尤其涉及一种实现延时消息队列的方法及系统。
背景技术
消息队列具有很好的削峰作用的功能——即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。在电子商务一些秒杀、促销活动中,合理使用消息队列可以有效抵御促销活动刚开始大量订单涌入对系统的冲击。延时消息即消息发送后并不立即对消费者可见,而是在用户指定的时间投递给消费者。比如我们现在发送一条延时1分钟的消息,消息发送后立即发送给服务器,但是服务器在1分钟后才将该消息交给消费者。
现有系统通过设置定时器对数据库进行轮询实现延时消息,造成了数据库读写性能急剧下降,从而影响了服务的整体性能。很多现有的分布式系统中已经存在了消息队列,有的消息队列不支持延时消息,有的部分支持延时消息(例如,对延时的时间有限制,比如5分钟、10分钟、1小时等,不支持任意时间的延时消息),无法完全满足业务需求。
发明内容
本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
鉴于上述现有存在的问题,提出了本发明。
因此,本发明提供了一种实现延时消息队列的方法及系统,解决了传统通过定时器轮询数据库实现延时消息带来整个系统性能下降的问题。
为解决上述技术问题,本发明提供如下技术方案:客户端模块发送消息至服务端模块内,所述服务端模块将所述消息写入到关系数据库内进行存储;所述服务端模块判定所述消息的到期时间大于当前服务器的时间,并生成一条新的延时消息记录;所述服务端模块将所述延时消息记录写入到内存数据库中的延时消息队列内,并周期性轮询所述延时消息队列;所述客户端模块向所述服务端模块拉取所述延时消息记录,所述服务端模块检查所述延时消息队列,并读取所述关系数据库内的所述消息内容,反馈给所述客户端模块;所述客户端模块接收所述消息内容,并发送ACK至所述服务端模块,显示所述消息已成功收到。
作为本发明所述的一种实现延时消息队列的方法的一种优选方案,其中:生成所述延时消息记录包括,所述关系数据库将所述消息存储,并自动生成一条消息记录ID;所述服务端模块基于所述消息的到期时间大于当前所述服务端模块的时间判定,利用所述消息记录ID,生成一条延时消息记录。
作为本发明所述的一种实现延时消息队列的方法的一种优选方案,其中:所述延时消息记录包括,所述消息记录ID;所述消息主题;所述消息的到期时间。
作为本发明所述的一种实现延时消息队列的方法的一种优选方案,其中:所述内存数据库将所述延时消息记录插入到所述延时消息队列中,对所述延时消息记录的到期时间从小到大进行排序。
作为本发明所述的一种实现延时消息队列的方法的一种优选方案,其中:轮询所述延时消息队列包括,所述服务端启动线程,周期性的扫描所述内存数据库内的所述延时消息队列;按照所述消息到期时间顺序依次读取所述延时消息记录,并判断所述延时消息记录的到期时间是否小于所述服务端模块的当前时间;若所述延时消息记录到期时间小于所述服务端模块的当前时间,所述服务端模块将所述延时消息记录从所述延时消息队列中删除,并增加一条新的消息记录到所述内存数据库内的到期消息队列中。
作为本发明所述的一种实现延时消息队列的方法的一种优选方案,其中:拉取所述延时消息记录包括,所述客户端模块利用TCP接口协议,与所述服务端模块建立长连接;所述客户端模块利用所述长连接向所述服务端模块拉取所述延时消息记录,并写入所述消息主题、到期时间;所述服务端模块检查所述到期消息队列内有无与写入的所述消息主题、到期时间一致的所述延时消息记录,并利用所述消息记录ID,从所述内存数据库内读取完整的所述消息内容;将读取的所述消息内容反馈给所述客户端模块。
作为本发明所述的一种实现延时消息队列的方法的一种优选方案,其中:所述客户端模块接收反馈的所述消息内容,并发送ACK给所述服务端模块,显示所述消息已成功收到。
作为本发明所述的一种基于实现延时消息队列的系统的一种优选方案,其中:所述客户端模块,包括调配器,其与所述服务端模块相对应,互相配合运行,所述调配器调用所述消息拉取接口,并写入所述消息主题、所述消息到期时间,通过所述服务端模块的反馈,获得所述延时消息记录;所述服务端模块,包括处理中心,所述处理中心接收要写入的所述消息,并传输到关系所述数据库内,所述处理中心基于所述消息的到期时间大于当前所述服务端模块的时间判定生成一条延时消息记录,利用周期性轮询所述延时消息队列获得所述消息到期时间;所述关系数据库,包括检索单元和转化器,写入的所述消息通过所述检索单元建立索引,加快所述消息引用,所述转化器将所述消息转化为所述消息记录ID、所述消息主题、所述消息到期时间,生成所述延时消息记录;所述内存模块,包括分选集和存储中心,所述消息缓存在所述存储中心内,保证效率的同时,会周期性的把更新的数据写入所述存储中心中,所述分选集录入不同的所述消息的字段,并通过所述存储中心分别保存。
本发明的有益效果:本发明采用一种扩展的方式与现有消息队列配合实现延时消息,一方面解决了传统通过定时器轮询数据库实现延时消息带来整个系统性能下降的问题,另一方面充分利用了现有的消息队列系统的功能并且对现有的消息队列实现了零侵入,避免了修改原消息队列系统带来的风险。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:
图1为本发明第一个实施例所述的实现延时消息队列的方法的流程示意图;
图2为本发明第一个实施例所述的实现延时消息队列的方法的又一种流程示意图;
图3为本发明第一个实施例所述的实现延时消息队列的方法的模块交互示意图;
图4为本发明第二个实施例所述的基于实现延时消息队列的系统的模块结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明,显然所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护的范围。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度、宽度及深度的三维空间尺寸。
同时在本发明的描述中,需要说明的是,术语中的“上、下、内和外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一、第二或第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
本发明中除非另有明确的规定和限定,术语“安装、相连、连接”应做广义理解,例如:可以是固定连接、可拆卸连接或一体式连接;同样可以是机械连接、电连接或直接连接,也可以通过中间媒介间接相连,也可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
实施例1
消息队列是分布式系统中重要的组件,消息队列通过异步处理提高系统性能和削峰、降低系统耦合性,在不使用消息队列服务器的时候,用户的请求数据直接写入数据库,在高并发的情况下数据库压力增,使得响应速度变慢。在使用消息队列之后,用户的请求数据发送给消息队列之后立即返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。
现有常规方法是通过设置定时器对数据库进行轮询实现延时消息,造成了数据库读写性能急剧下降,从而影响了服务的整体性能;而本发明方法利用服务端周期性轮询内存延时消息队列,没有产生磁盘读写,只是基于访问缓存模块,不会对服务器性能造成影响,从而提高了系统的稳定性。
参照图1~图3,为本发明的第一个实施例,提供了一种实现延时消息队列的方法,包括以下步骤:
S1:客户端模块100发送消息至服务端模块200内,服务端模块200将消息写入到关系数据库300内进行存储。
S2:服务端模块200判定消息的到期时间大于当前服务器的时间,并生成一条新的延时消息记录。本步骤需要说明的是,其中需要说明的是,生成延时消息记录包括:
关系数据库300将消息存储,并自动生成一条消息记录ID;
服务端模块200基于消息的到期时间大于当前服务端模块200的时间判定,利用消息记录ID,生成一条延时消息记录。
具体的,延时消息记录包括:
消息记录ID;
消息主题;
消息的到期时间。
S3:服务端模块200将延时消息记录写入到内存数据库400中的延时消息队列内,并周期性轮询延时消息队列。本步骤需要说明的是,将延时消息记录写入到延时消息队列内包括:
内存数据库400将延时消息记录插入到延时消息队列中,对延时消息记录的到期时间从小到大进行排序。
进一步的,轮询延时消息队列包括:
服务端200启动线程,周期性的扫描内存数据库400内的延时消息队列;
按照消息到期时间顺序依次读取延时消息记录,并判断延时消息记录的到期时间是否小于服务端模块200的当前时间;
若延时消息记录到期时间小于服务端模块200的当前时间,服务端模块200将延时消息记录从延时消息队列中删除,并增加一条新的消息记录到内存数据库400内的到期消息队列中。
S4:客户端模块100向服务端模块200拉取延时消息记录,服务端模块200检查延时消息队列,并读取关系数据库300内的消息内容,反馈给客户端模块100。其中还需要说明的是,拉取延时消息记录包括:
客户端模块100利用TCP接口协议,与服务端模块200建立长连接;
客户端模块100利用长连接向服务端模块200拉取延时消息记录,并写入消息主题、到期时间;
服务端模块200检查到期消息队列内有无与写入的消息主题、到期时间一致的延时消息记录,并利用消息记录ID,从内存数据库300内读取完整的消息内容;
将读取的消息内容反馈给客户端模块100。
S5:客户端模块100接收消息内容,并发送ACK至服务端模块200,显示消息已成功收到。
较佳的,参照图3,client是客户端,server是服务端,redis是一个开源的内存数据库,mysql是一个开源的关系新数据库。服务端模块200比较消息的到期时间和当前服务器的时间,生成一条延时消息记录;服务端模块200将延时消息记录插入到Redis(内存数据库模块400)的延时消息队列中,并按照延时消息记录的到期时间由小到大进行排序;服务端模块200周期性的轮询内存数据库模块400的延时消息队列,按照到期时间抽取延迟消息记录,读取消息内容并反馈给客户端模块100。例如,服务器的当前时间是2019-12-20 19:00:05,消息M的到期时间是2019-12-20 20:00:08,服务端模块200基于消息M的到期时间大于服务器的当前时间的判定,生成一条延时消息记录,其包括了消息在数据库中的Id、消息主题(topic)和消息的到期时间(即本实施中2019-12-20 20:00:08);服务端模块200将延时消息记录插入到Redis(内存数据库模块400)的延时消息队列中,内存数据库模块400的延时消息队列采用的是Redis的Sorted Set(分选集,即一个排序的集合),分选集按照延时消息记录的到期时间由小到大进行排序;服务端模块200在2019-12-20 20:00:10时刻轮询延时消息队列时,按到期时间顺序取出延时消息M,判断消息M的到期时间是2019-12-2020:00:08,它小于服务器的当前时间,服务端模块200将延时消息M从内存数据库模块400的延时消息队列中删除,并增加一条新的消息记录到内存数据库模块400的到期消息队列中;当客户端模块100拉取订阅延时消息M的请求时,服务端模块200检查Redis(内存数据库模块400)的到期消息队列,如果到期消息队列中的延时消息M主题和客户端订阅的延时消息M主题相同,服务端模块200取出该条消息,并根据延时消息M的Id从MySql(关系数据库300)中读取完整消息内容发送给客户端模块100。本发明方法通过对比消息的到期时间和服务端的当前时间进行消息是否延时的检查,每条消息都可以配置不同的延时时间,对比当前现有的受限于时间的消息队列支持的延时消息(例如只支持固定时延的延迟消息,或从服务端启动后的某一时间的每隔1小时的延时消息)方法,本发明方法更灵活。
优选的,redis(内存数据库模块400)的延时消息队列和到期消息队列不存储消息的所有字段,只存储消息的主题、消息在数据库中的Id以及消息的到期的时间,信息的长度相对固定并且字节数很少,且保存在内存中,所以,服务端模块200周期性的轮询内存数据库400中延时消息队列不会产生磁盘读写,对服务器性能没有影响。
而现有常规方法是利用数据库将所有数据保存在磁盘中,如果数据中保存了大量的消息记录(例如百万级别的数据),服务器直接轮询数据库的每一条消息都会产生大量的磁盘读写(写是因为要标记该条消息的状态是否已到期),如果轮询的周期非常短,则会对服务器的性能造成很大的影响,例如,此时服务器发起对其他业务数据的读写,数据库会因为在频繁读写消息数据导致读写其他业务数据发生延时,进而影响其他的业务流程,造成数据访问的雪崩。
本发明方法通过采用内存数据库400存储延时消息队列信息策略、关系数据库300存储完整消息内容策略,配合服务端模块200定时轮询延时消息队列,进行延时时间和当前服务端时间的比对,实现延时消息的到期处理,从而实现了一个延时消息的业务功能。
例如,电商网站上我们购物的时候,下单后没有立即支付,这个时候界面上往往会提醒你如果xx分钟还未支付订单将被取消,对于这么一个功能如果不使用延时消息,那我们就需要使用类似定时任务的功能,比如每分钟我们跑一个定时任务对订单表进行扫描,将未支付订单扫出,如果从下单时间到现在已经超过了45分钟则将该订单取消;但是定时扫描效率不高,如果订单很多将会严重的影响数据库的性能,如果使用延时消息就没有这样的问题了,只需要发送一条延时xx分钟的的延时消息即可,在消息里携带有订单号,xx分钟后消费者收到该消息检查对应订单状态做出对应处理,这种方式将大大减轻对数据库的压力,实现起来也更优雅。
通过本发明方法,不仅缓解了数据库的压力,还增加了存储量,加快了系统处理速度,使得系统可以在不支持延时消息的消息队列下自增新生新的独立的消息队列,且互不影响,进一步的实现了对原有系统的零侵入。
实施例2
参照图4,为本发明的第二个实施例,该实施例不同于第一个实施例的是,提供了一种基于实现延时消息队列的系统,包括客户端模块100、服务端模块200、关系数据库300、内存数据库400,客户端模块100,包括调配器101,其与服务端模块200相对应,互相配合运行,调配器101调用消息拉取接口,并写入消息主题、消息到期时间,通过服务端模块200的反馈,获得延时消息记录;服务端模块200,包括处理中心201,处理中心201接收要写入的消息,并传输到关系数据库300内,处理中心201基于消息的到期时间大于当前服务端模块200的时间判定生成一条延时消息记录,利用周期性轮询延时消息队列获得消息到期时间;关系数据库300,包括检索单元301和转化器302,写入的消息通过检索单元301建立索引,加快消息引用,转化器将消息转化为消息记录ID、消息主题、消息到期时间,生成延时消息记录;内存模块400,包括分选集401和存储中心402,消息缓存在存储中心402内,保证效率的同时,会周期性的把更新的数据写入存储中心402中,分选集401录入不同的消息的字段,并通过存储中心402分别保存。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
如在本申请所使用的,术语“组件”、“模块”、“系统”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互)的信号,以本地和/或远程过程的方式进行通信。
应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (7)
1.一种实现延时消息队列的方法,其特征在于:包括,
客户端模块(100)发送消息至服务端模块(200)内,所述服务端模块(200)将所述消息写入到关系数据库(300)内进行存储;
所述服务端模块(200)判定所述消息的到期时间大于当前服务器的时间,并生成一条新的延时消息记录;
所述服务端模块(200)将所述延时消息记录写入到内存数据库(400)中的延时消息队列内,并周期性轮询所述延时消息队列;
所述客户端模块(100)向所述服务端模块(200)拉取所述延时消息记录,所述服务端模块(200)检查到期消息队列,并读取所述关系数据库(300)内的所述消息内容,反馈给所述客户端模块(100);
所述客户端模块(100)接收所述消息内容,并发送ACK至所述服务端模块(200),显示所述消息已成功收到。
2.如权利要求1所述的实现延时消息队列的方法,其特征在于:生成所述延时消息记录包括,
所述关系数据库(300)将所述消息存储,并自动生成一条消息记录ID;
所述服务端模块(200)基于所述消息的到期时间大于当前所述服务端模块(200)的时间判定,利用所述消息记录ID,生成一条延时消息记录。
3.如权利要求1或2所述的实现延时消息队列的方法,其特征在于:所述延时消息记录包括,
所述消息记录ID;
所述消息主题;
所述消息的到期时间。
4.如权利要求1或2所述的实现延时消息队列的方法,其特征在于:将所述延时消息记录写入到所述延时消息队列内包括,
所述内存数据库(400)将所述延时消息记录插入到所述延时消息队列中,对所述延时消息记录的到期时间从小到大进行排序。
5.如权利要求4所述的实现延时消息队列的方法,其特征在于:轮询所述延时消息队列包括,
所述服务端模块(200)启动线程,周期性的扫描所述内存数据库(400)内的所述延时消息队列;
按照所述消息到期时间顺序依次读取所述延时消息记录,并判断所述延时消息记录的到期时间是否小于所述服务端模块(200)的当前时间;
若所述延时消息记录到期时间小于所述服务端模块(200)的当前时间,所述服务端模块(200)将所述延时消息记录从所述延时消息队列中删除,并增加一条新的消息记录到所述内存数据库(400)内的到期消息队列中。
6.如权利要求5所述的实现延时消息队列的方法,其特征在于:拉取所述延时消息记录包括,
所述客户端模块(100)利用TCP接口协议,与所述服务端模块(200)建立长连接;
所述客户端模块(100)利用所述长连接向所述服务端模块(200)拉取所述延时消息记录,并写入所述消息主题、到期时间;
所述服务端模块(200)检查所述到期消息队列内有无与写入的所述消息主题、到期时间一致的所述延时消息记录,并利用所述消息记录ID,从所述关系数据库(300)内读取完整的所述消息内容;
将读取的所述消息内容反馈给所述客户端模块(100)。
7.一种实现延时消息队列的系统,其特征在于:包括,
客户端模块(100),包括调配器(101),其与服务端模块(200)相对应,互相配合运行,调配器(101)调用消息拉取接口,并写入消息主题、消息到期时间,通过服务端模块(200)的反馈,获得延时消息记录;
服务端模块(200),包括处理中心(201),处理中心(201)接收要写入的消息,并传输到关系数据库(300)内,处理中心(201)基于消息的到期时间大于当前服务端模块(200)的时间判定生成一条延时消息记录,将延时消息记录写入到内存数据库(400)中的延时消息队列内,利用周期性轮询延时消息队列获得消息到期时间;
关系数据库(300),包括检索单元(301)和转化器(302),写入的消息通过检索单元(301)建立索引,加快消息引用,转化器将消息转化为消息记录ID、消息主题、消息到期时间,生成延时消息记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911369004.6A CN111225041B (zh) | 2019-12-26 | 2019-12-26 | 一种实现延时消息队列的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911369004.6A CN111225041B (zh) | 2019-12-26 | 2019-12-26 | 一种实现延时消息队列的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111225041A CN111225041A (zh) | 2020-06-02 |
CN111225041B true CN111225041B (zh) | 2023-04-07 |
Family
ID=70827801
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911369004.6A Active CN111225041B (zh) | 2019-12-26 | 2019-12-26 | 一种实现延时消息队列的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111225041B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111901619B (zh) * | 2020-07-23 | 2023-10-31 | 北京达佳互联信息技术有限公司 | 一种消息推送方法和装置 |
CN111901224A (zh) * | 2020-07-24 | 2020-11-06 | 中国平安财产保险股份有限公司 | 延时消息加载方法、装置、设备及计算机可读存储介质 |
CN112015572A (zh) * | 2020-08-25 | 2020-12-01 | 广州鲁邦通物联网科技有限公司 | 一种延时任务的执行方法、中心和系统 |
CN112738156B (zh) * | 2020-12-11 | 2023-05-26 | 广东电力通信科技有限公司 | 一种适用于智能网关的独立镜像管理方法 |
CN112764947B (zh) * | 2021-01-15 | 2023-12-26 | 百果园技术(新加坡)有限公司 | 消息数据拉取方法、装置、设备和存储介质 |
CN112767084B (zh) * | 2021-01-20 | 2022-08-26 | 中乾思创(北京)科技有限公司 | 一种基于云计算的数据安全校验方法、装置及服务器 |
CN112925642A (zh) * | 2021-02-25 | 2021-06-08 | 百果园技术(新加坡)有限公司 | 一种延迟消息处理方法、装置、设备及存储介质 |
CN112801559A (zh) * | 2021-04-09 | 2021-05-14 | 恒生电子股份有限公司 | 业务请求的处理方法、装置、设备和存储介质 |
CN113260020B (zh) * | 2021-06-22 | 2021-09-28 | 浩鲸云计算科技股份有限公司 | 延迟队列实现5g切片成员签约及去签约的方法及系统 |
CN114020464B (zh) * | 2021-11-05 | 2022-11-01 | 江苏安超云软件有限公司 | 一种动态处理虚拟化资源的方法、装置及存储介质 |
CN115529288B (zh) * | 2022-09-21 | 2024-04-19 | 上海浦东发展银行股份有限公司 | 一种消息推送的方法、装置、计算机设备 |
CN115344411B (zh) * | 2022-10-17 | 2023-01-03 | 深圳海智创科技有限公司 | 一种控制消息队列任意延时的方法及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102523177A (zh) * | 2011-12-19 | 2012-06-27 | 北京新媒传信科技有限公司 | 一种消息推送服务的实现方法与系统 |
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
CN108733462A (zh) * | 2017-04-18 | 2018-11-02 | 北京京东尚科信息技术有限公司 | 延迟任务的方法和装置 |
CN110502327A (zh) * | 2019-08-28 | 2019-11-26 | 四川长虹电器股份有限公司 | 基于Redis高并发延时任务处理的方法 |
-
2019
- 2019-12-26 CN CN201911369004.6A patent/CN111225041B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102523177A (zh) * | 2011-12-19 | 2012-06-27 | 北京新媒传信科技有限公司 | 一种消息推送服务的实现方法与系统 |
CN108733462A (zh) * | 2017-04-18 | 2018-11-02 | 北京京东尚科信息技术有限公司 | 延迟任务的方法和装置 |
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
CN110502327A (zh) * | 2019-08-28 | 2019-11-26 | 四川长虹电器股份有限公司 | 基于Redis高并发延时任务处理的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111225041A (zh) | 2020-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111225041B (zh) | 一种实现延时消息队列的方法及系统 | |
US8375389B2 (en) | Ordered scheduling of suspended processes based on resumption events | |
US7979791B2 (en) | Cross-domain communication | |
WO2016206600A1 (zh) | 一种信息流数据的处理方法和装置 | |
CN112615907B (zh) | 一种数据同步系统及方法 | |
CN111030784A (zh) | 一种信息同步方法和装置 | |
US7711794B2 (en) | Adjusting timing between automatic, non-user-initiated pollings of server to download data therefrom | |
CN111865970A (zh) | 用于实现接口幂等性的方法和装置 | |
CN110620681B (zh) | 网络连接超时时间设置方法、装置、设备及介质 | |
WO2018223941A1 (zh) | 多保险产品出单的装置、方法及计算机可读存储介质 | |
CN109842621B (zh) | 一种减少token存储数量的方法及终端 | |
CN112925661A (zh) | 消息处理方法、装置、计算机设备及存储介质 | |
EP3832572A1 (en) | Renewal message system | |
CN110659971B (zh) | 一种交易数据处理方法及装置 | |
US10649964B2 (en) | Incorporating external data into a database schema | |
CN111061689A (zh) | 用于对象存储系统的文件过期处理方法、装置及电子设备 | |
US11922002B2 (en) | Notification display in message session | |
CN113179301A (zh) | 文件的下载方法和装置、存储介质、电子装置 | |
WO2022206054A1 (zh) | 一种物料增量处理方法、装置、电子设备和计算机存储介质 | |
US20080222210A1 (en) | Efficiently handling information on changes to a uddi registry including those resulting in virtual deletes | |
US9361651B2 (en) | Displaying quantitative trending of pegged data from cache | |
CN110557324A (zh) | 未读im消息处理方法及装置 | |
US9372936B2 (en) | Partial data report generation with data costing notification | |
CN117424929A (zh) | 通知消息处理方法、装置、电子设备及存储介质 | |
CN116795877B (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210220 Address after: 11 / F, Liuwu building, Liuwu New District, Lhasa City, Tibet Autonomous Region, 850000 Applicant after: Tibet ningsuan Technology Group Co.,Ltd. Address before: Building C4, No.55 Liyuan South Road, moling street, Nanjing, Jiangsu Province Applicant before: DILU TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |