延迟消息处理方法、装置与系统

文档序号:1963592 发布日期:2021-12-14 浏览:10次 >En<

阅读说明:本技术 延迟消息处理方法、装置与系统 (Method, device and system for processing delay message ) 是由 刘德慧 于 2020-10-29 设计创作,主要内容包括:本公开提供一种延迟消息处理方法、装置与系统。延迟消息处理方法包括:从数据库中读取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列;响应延迟消息取出指令返回所述第一队列中的目标延迟消息,并将所述目标延迟消息从所述第一队列转移存储到第二队列;响应对应于所述目标延迟消息的延迟消息消费成功消息,在所述第二队列和所述数据库中删除所述目标延迟消息。本公开实施例可以提高延迟消息的存储容量、处理效率和数据可靠性。(The disclosure provides a method, a device and a system for processing delay messages. The delayed message processing method comprises the following steps: reading a plurality of delay messages with consumption time within a preset time period from a database, and storing the delay messages with consumption time earlier than or equal to the current time point into a first queue; returning a target delay message in the first queue in response to a delay message fetching instruction, and transferring and storing the target delay message from the first queue to a second queue; deleting the target delayed message in the second queue and the database in response to a delayed message consumption success message corresponding to the target delayed message. The embodiment of the disclosure can improve the storage capacity, the processing efficiency and the data reliability of the delay message.)

延迟消息处理方法、装置与系统

技术领域

本公开涉及计算机技术领域,具体而言,涉及一种能够提高延迟消息的存储容量、数据可靠性以及处理效率的延迟消息处理方法、装置与系统。

背景技术

延迟消息是指被业务系统设置为延迟到一定时间后执行的消息。在Java技术中,通过自带的DelayQueue(延迟队列)将延迟消息暂存于JVM(Java Virtual Machine,Java虚拟机)内存中来管理延迟消息。但是,由于JVM的容量有限,这种方式无法应用于数据量较大(延迟消息较多)的场景,此外,JVM会在硬件重启时释放内存,导致暂存的延迟消息丢失。

需要说明的是,在上述

背景技术

部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

发明内容

本公开的目的在于提供一种延迟消息处理方法、装置与系统,用于至少在一定程度上克服由于相关技术的限制和缺陷而导致的延迟消息的存储容量、数据可靠性以及处理效率不足的问题。

根据本公开实施例的第一方面,提供一种延迟消息处理方法,包括:从数据库中读取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列;响应延迟消息取出指令返回所述第一队列中的目标延迟消息,并将所述目标延迟消息从所述第一队列转移存储到第二队列;响应对应于所述目标延迟消息的延迟消息消费成功消息,在所述第二队列和所述数据库中删除所述目标延迟消息。

在本公开的一种示例性实施例中,所述从数据库中读取消费时间在预设时间段内的多个延迟消息包括:将消费时间晚于所述当前时间点的所述延迟消息存储到第三队列,所述第三队列为带有时间刻度的环形队列;定时将所述第三队列中消费时间早于或等于所述当前时间点的所述延迟消息转移存储到所述第一队列。

在本公开的一种示例性实施例中,所述从数据库中读取消费时间在预设时间段内的多个延迟消息包括:根据延迟消息识别符从数据库中读取与目标应用编号和目标业务编号对应的多个所述延迟消息。

在本公开的一种示例性实施例中,所述方法还包括:将所述第二队列中存储时长超过预设值的所述延迟消息转移存储到所述第一队列。

在本公开的一种示例性实施例中,所述从数据库中读取消费时间在预设时间段内的多个延迟消息包括:仅读取消费时间在所述预设时间段内且当前未存储于所述第一队列、所述第二队列、所述第三队列中的多个延迟消息。

根据本公开实施例的第二方面,提供一种延迟消息处理装置,包括:消息提取模块,设置为从数据库中读取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列;消息转存模块,设置为响应延迟消息取出指令返回所述第一队列中的目标延迟消息,并将所述目标延迟消息从所述第一队列转移存储到第二队列;消息删除模块,设置为响应对应于所述目标延迟消息的延迟消息消费成功消息,在所述第二队列和所述数据库中删除所述目标延迟消息。

在本公开的一种示例性实施例中,所述网关模块设置为:根据所述延迟消息存储指令获取延迟消息;根据所述延迟消息的应用编号、业务编号、消费时间生成延迟消息识别符;根据所述延迟消息识别符将所述延迟消息存入所述数据库。

根据本公开的第三方面,提供一种延迟消息处理系统,包括:多个业务模块,用于产生延迟消息、消费延迟消息,以及发送延迟消息存储指令、延迟消息取出指令以及延迟消息消费成功消息;数据库,用于存储所述延迟消息;网关模块,连接于所述多个业务模块、所述数据库和多个延迟消息处理装置,用于接收所述延迟消息存储指令以将延迟消息存入所述数据库、分发所述延迟消息取出指令和所述延迟消息消费成功消息至所述多个延迟消息处理装置;多个延迟消息处理装置,每个所述延迟消息处理装置与一个所述业务模块对应,与所述数据库和所述网关模块连接,用于执行如上任一项所述的方法。

根据本公开的第四方面,提供一种电子设备,包括:存储器;以及耦合到所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上述任意一项所述的方法。

根据本公开的第五方面,提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述任意一项所述的方法。

本公开实施例通过将延迟消息存储到数据库,通过读取数据库仅将预设时间段内的延迟消息存储到第一队列中,可以避免相关技术中将延迟消息存储到缓存造成的存储容量低下,同时保持延迟消息被提取的效率;通过将已被拉取的延迟消息转移存储第二队列中,只在获取到延迟消息被消费成功的信息后再删除第二队列和数据库中的延迟消息,可以在延迟消息未被成功消费之前避免延迟消息被删除,有效提高了延迟消息存储的数据可靠性。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本公开示例性实施例中一种延迟消息处理系统的示意图。

图2是本公开示例性实施例中一种延迟消息处理方法的流程图。

图3是本公开实施例提供的延迟消息处理系统执行延迟消息处理方法的示意图。

图4是本公开实施例中延迟消息处理系统的交互示意图。

图5是本公开示例性实施例中一种延迟消息处理装置的方框图。

图6是本公开示例性实施例中一种电子设备的方框图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。

此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

下面结合附图对本公开示例实施方式进行详细说明。

图1是本公开示例性实施例中一种延迟消息处理系统的示意图。

参考图1,延迟消息处理系统100可以包括:

多个业务模块11,用于产生延迟消息、消费延迟消息,以及发送延迟消息存储指令、延迟消息取出指令以及延迟消息消费成功消息;

数据库12,用于存储延迟消息;

网关模块13,连接于多个业务模块11、数据库12和多个延迟消息处理装置14,用于接收延迟消息存储指令以将延迟消息存入数据库12、分发延迟消息取出指令和延迟消息消费成功消息至多个延迟消息处理装置14;

多个延迟消息处理装置14,每个延迟消息处理装置14与一个业务模块11对应,与数据库12和网关模块13连接,用于执行本公开实施例提供的延迟消息处理方法。

多个业务模块11例如可以为不同应用程序中的不同业务模块,应用程序既可以为移动设备端(例如手机、平板电脑)的应用程序,也可以为非移动设备端(例如台式机、笔记本)的应用程序。在一些实施例中,这些业务模块11通过Java语言实现,在其他实施例中,业务模块11也可以通过其他编程语言实现。

数据库12的具体种类包括但不限于Redis、Sharkstore、Mysql、ES数据库,本领域技术人员可以根据实际需求自行设置。数据库12可以位于一个或多个硬件设备上,系统100可以通过分布式集群部署实现多个数据库12。

系统100中网关模块13的数量既可以为一个,也可以为多个。当使用分布式集群部署通过多台硬件设备实现系统100时,可以为每台硬件设备配置一个网关模块13。除了接收延迟消息存储指令以将延迟消息存入数据库12、分发延迟消息取出指令和延迟消息消费成功消息至多个延迟消息处理装置14,网关模块13还可以通过白名单授权等机制限制能够使用系统100的业务模块11,或者针对不同的业务模块11进行限流控制。

延迟消息处理装置14可以用于执行本公开实施例提供的延迟消息处理方法。

图2是本公开示例性实施例中一种延迟消息处理方法的流程图。

参考图2,延迟消息处理方法200可以包括:

步骤S1,从数据库中读取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列;

步骤S2,响应延迟消息取出指令返回所述第一队列中的目标延迟消息,并将所述目标延迟消息从所述第一队列转移存储到第二队列;

步骤S3,响应对应于所述目标延迟消息的延迟消息消费成功消息,在所述第二队列和所述数据库中删除所述目标延迟消息。

本公开实施例通过将延迟消息存储到数据库,通过读取数据库仅将预设时间段内的延迟消息存储到第一队列中,可以避免相关技术中将延迟消息存储到缓存中造成的存储容量低下,同时保持延迟消息被提取的效率;通过将已被拉取的延迟消息存储第二队列中,只在获取到延迟消息被消费成功的信息后再删除第二队列和数据库中的延迟消息,可以在延迟消息未被成功消费之前避免延迟消息被删除,有效提高了延迟消息存储的数据可靠性。

下面,对延迟消息处理方法100的各步骤进行详细说明。

在步骤S1,从数据库中读取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列。

在本公开实施例中,全部待使用的延迟消息均在数据库中存储,只将当前时间点之前一段时间内的(即将要使用的)延迟消息从数据库中读取到内存,以保证对延迟消息取出指令的快速响应。其中,内存例如可以为JVM内存。由于使用数据库存储延迟消息,可以极大增加延迟消息的存储容量以及数据可靠性。在一个实施例中,预设时间段例如可以为当前时间点到当前时间点之后的x时长,x可以由本领域技术人员自行设置,例如可以为10分钟。

该第一队列位于内存中。第一队列作为存储已经超过预定的消费时间或者马上超过预定的消费时间的延迟消息的存储介质,可以被称为“就绪队列”。在一些实施例中,第一队列可以为不满状态,甚至为空。

在一个实施例中,可以将读取出的多个延迟消息中消费时间晚于当前时间点的延迟消息存储到第三队列,第三队列例如为带有时间刻度的环形队列,可以被称为“轮盘”。由于内存上没有环形结构,因此轮盘可以利用数组的线性空间来实现,当数据指针到队列尾部时,下一个指针地址变为队列头部,即转回操作,转回操作可以通过取模来执行。轮盘中的存储内容按照时间刻度存储,可以把消费时间相同的延迟消息存储在轮盘的一个时间刻度下,从而可以使用轮盘的异步线程来实现第三队列自动将预设时间的延迟消息(即指针当前指向的时间刻度对应的存储内容)转移存储到第一队列。在本公开实施例中,该预设时间为当前时间,即系统时间。可以使用异步线程设置轮盘将第三队列中消费时间达到当前时间点的一个或者多个延迟消息转移存储到第一队列,以备及时提取。

在步骤S2,响应延迟消息取出指令返回所述第一队列中的目标延迟消息,并将所述目标延迟消息从所述第一队列转移存储到第二队列。

在本公开实施例中,一个延迟消息处理装置14与一个应用程序的一个业务对应。一个延迟消息处理装置14接收到的延迟消息取出指令是由网关模块13根据该延迟消息取出指令的来源业务模块的应用编号和业务编号分发的,该来源业务模块与该延迟消息处理装置14对应。

延迟消息处理装置14接收到延迟消息取出指令(POP指令)后,将当前位于第一队列中的全部延迟消息返回给该延迟消息取出指令,因此,返回的延迟消息的数量既可以是多个,也可以是一个,在一些情况下,还可能为零。即,如果不存在消费时间等于或早于当前时间的延迟消息,则该延迟消息取出指令无法获得延迟消息。

在本公开实施例中,将对应延迟消息取出指令返回的一批延迟消息均称为目标延迟消息。返回目标延迟消息后,将目标延迟消息转移存储到第二队列。第二队列的设置是为了防止延迟消息在未被消费成功时被删除,第二队列也设置在内存中(例如JVM内存),形式可以为一般队列形式。

一批目标延迟消息被转移存储到第二队列之后,在预设时间之内第一队列中不存在这些目标延迟消息。

在步骤S3,响应对应于所述目标延迟消息的延迟消息消费成功消息,在所述第二队列和所述数据库中删除所述目标延迟消息。

在一些实施例中,延迟消息处理装置14在接收到延迟消息取出指令后接到的下一个指令即是延迟消息消费成功消息,此时可以将第二队列中最新存储的一批目标延迟消息删除,并根据目标延迟消息的延迟消息识别符在数据库中删除对应的延迟消息。

在另一些实施例中,连续延迟消息处理装置14在接收到一个延迟消息取出指令后接到的下一个指令仍旧是延迟消息取出指令,此时存在两种情况,第一种情况是与在先延迟消息取出指令对应的第一批延迟消息未被消费成功,第二种情况是接下来会连续接收到与两个延迟消息取出指令对应的两个延迟消息消费成功消息。

本公开一个实施例通过设置异步线程将第二队列中存储时长超过预设值的延迟消息自动转移存储到第一队列,以供取用。为了应对第一种情况,该预设值例如可以小于两个延迟消息取出指令的通常时间间隔,该通常时间间隔可以通过读取系统设置或者通过统计多个延迟消息取出指令的平均时间间隔得到。当设置自动将第二队列中超时存储的延迟消息“退回”到第一队列时,可以保证第二队列中存储的全部延迟消息均是对应于最近一条延迟消息取出指令的目标延迟消息,此时可以对应于最新的延迟消息消费成功消息,删除第二队列中的全部延迟消息,即清空第二队列,同时根据被删除的延迟消息的延迟消息识别符在数据库中删除对应的延迟消息。

为了应对第二种情况,可以设置按存储时间批量删除第二队列中的延迟消息。例如,可以在接收到一个延迟消息消费成功消息之后,判断该延迟消息消费成功消息与上一个延迟消息取出指令的时间间隔是否在预设范围内(一般而言,一个延迟消息取出指令与其对应的延迟消息消费成功消息的时间间隔具有一个稳定值),如果该时间间隔在预设时间内,说明接收到的是最近一条延迟消息取出指令对应的延迟消息消费成功消息,更早的延迟消息取出指令未能成功发送延迟消息消费成功消息,此时可以将最近存储到第二队列中的一批目标延迟消息及其在数据库存储中的对应延迟消息删除,并将第二队列中存储时间更早的延迟消息转移存储到第一队列中;如果该时间间隔不在预设时间内,说明本条延迟消费成功消息对应的是更早的延迟消息取出指令,此时可以根据该时间间隔与该预设时间的比值确定当前的本条延迟消息消费成功消息对应哪一条延迟消息取出指令,然后将该条延迟消息取出指令对应的一批目标延迟消息及其在数据库中存储的对应延迟消息删除,将存储时间早于该批目标延迟消息的延迟消息转移存储到第一队列,不对存储时间晚于该批目标延迟消息的延迟消息进行操作。

此时,如果设置异步线程将第二队列中存储时长超过预设值的延迟消息自动转移存储到第一队列,则该预设值可以设置为大于n倍的上述预设时间,n为大于等于2的整数,例如可以为3,以允许每批目标延迟消息在3个延迟消息消费成功消息均不与该批目标延迟消息对应时,被转移存储到第一队列。

如何设置上述预设值可以由本领域技术人员根据实际需求、延迟消息取出指令和延迟消费发送指令的发送逻辑来确定,本公开对此不作特殊限制。

删除第二队列中的延迟消息及其在数据库中对应的延迟消息后,可以将本次延迟消息消费过程记录在预设的延迟消息表和延迟消息归档表中。延迟消息表和延迟消息归档表的结构可以相同,用来记录处理过的延迟消息的延迟消息识别符、应用编号、业务编号、延迟消息内容、延迟消息创建的时间、消费时间和消费成功的时间等。

由于第一队列、第二队列、第三队列中存储的延迟消息均为未被消费成功的延迟消息,这些延迟消息均在数据库中有对应的延迟消息,为了尽量避免重复消费,可以在读取消费时间在预设时间段内的多个延迟消息时,仅读取消费时间在所述预设时间段内且当前未存储于第一队列、第二队列、第三队列中的多个延迟消息。

图3是本公开实施例提供的延迟消息处理系统100执行延迟消息处理方法200的示意图。

参考图3,系统100中,网关模块13和延迟消息处理装置14均可以由统一的配置中心15设置,以执行延迟消息处理方法200。

在执行延迟消息处理方法200时,业务模块11生成延迟消息,并发送延迟消息存储指令(PUSH指令)给网关模块13,以存储该延迟消息。该延迟消息存储指令包括应用编号(APP Code)、业务编号、数据隔离标识(片ID)、消息体内容(Message Content)。其中,数据隔离标识用于隔离不同的消息体内容。

当网关模块13接收到一个业务模块11发来的延迟消息存储指令时,判断该业务模块11是否具有使用处理延迟消息的权限,如果有,判断该业务模块11是否还有剩余流量来使用系统100,如果该业务模块11符合权限要求和流量要求,则网关模块13获取待存储的延迟消息,然后根据该延迟消息的消费时间、应用编号、业务编号生成延迟消息识别符(延迟消息ID)。

在本公开实施例中,延迟消息识别符例如可以为64位长整型(Long类型)数据。其中,为了避免出现负数,第一位不使用;第2~11位用于记录应用编号、业务编号和数据隔离标识(片ID):前8位用于记录应用编号和业务编号,后2位用于记录片ID,最大为3;第12~52位用于记录延迟消息的消费时间的时间戳,该时间戳根据当前时间减去基点时间的差值来记录,单位是毫秒,这41位数据最大支持对69年的时间戳记录,其中该基点时间可以自行设置,例如为软件发布日期的零点;第53~64位用于记录在消费时间为同一毫秒的延迟消息中,当前延迟消息的序号,这12位数据的最大值为4095。

生成延迟消息识别符后,网关模块13按照该延迟消息识别符将各延迟消息存入数据库12中的延迟消息表,使用延迟消息识别符(延迟消息ID)作为主键,将延迟消息体的内容分字段存储到该延迟消息表中该主键对应的各字段,其中该延迟消息表中一个主键对应的字段例如可以包括使用时间、应用编码、业务编码、数据隔离标识、消息体内容等等。

各延迟消息处理装置14读取消费时间在预设时间段内的多个延迟消息时,仅读取与自己对应的目标应用编号和目标业务编号的延迟消息。通过使用应用编号、业务编号和消费时间生成延迟消息识别符,可以使各延迟消息处理装置14能够仅读取延迟消息识别符即可快速识别到对应的应用编号和业务编号的延迟消息,也能快速识别到消费时间在预设时间段内的多个延迟消息。

当网关模块13接收到一个业务模块11发送的延迟消息取出指令(POP指令)或者一个延迟消息消费成功消息时,可以首先获取该延迟消息指令或者该延迟消息消费成功消息对应的应用编号和业务编号,判断业务模块11是否符合权限要求和流量要求,如果均符合,网关模块13将该延迟消息取出指令或者该延迟消息消费成功消息发送给该应用编号、该业务编号对应的延迟消息处理装置14。延迟消息处理装置14在接收到一个POP指令或者延迟消息消费成功消息时,根据图2所示实施例的方式对该POP指令进行响应,本公开于此不再赘述。

其中,当延迟消息处理装置14响应延迟消息读取指令返回延迟消息时,将一批延迟消息作为延迟消息读取指令的返回值发送给网关模块13,由网关模块13将该批延迟消息转发给对应的业务模块11。业务模块11接收到该批延迟消息后,消费延迟消息,并在消费成功时对网关模块13发送延迟消息消费成功指令。

多个延迟消息处理装置14可以通过分布式集群实现,通过zookeeper实现集群任务分配。zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,可以为分布式应用提供一致性服务。系统100启动时,多个延迟消息处理装置14在启动时参与选举,由zookeeper主持选举选出leader(主持者),由主持者通过与集群中的其他机器通信执行集群任务分配,为多个延迟消息处理装置14分配对应的应用编码和业务编码,使一个延迟消息处理装置14负责处理一个应用编码、一个业务代码对应的延迟消息,即一个延迟消息处理装置14与一个应用编码和一个业务代码对应。在本公开实施例中,一个延迟消息处理装置14例如可以为一个服务。

图4是本公开实施例中延迟消息处理系统的交互示意图。

参考图4,系统100的运行过程中,活跃存在多个异步线程,其中,独立存在且能够并行运行的异步线程至少包括:

线程131,延迟消息存储指令响应线程,由网关模块13开启,用于响应延迟消息存储指令,获取延迟消息,根据延迟消息的应用编号、业务编号、消费时间生成延迟消息识别符,根据延迟消息识别符将延迟消息存入数据库。

线程132,延迟消息取出指令分发线程,由网关模块13开启,用于响应延迟消息取出指令,将延迟消息取出指令分发到其应用编号、业务编号对应的延迟消息处理装置14中。

线程133,延迟消息消费成功消息分发线程,由网关模块13开启,用于将延迟消息消费成功消息分发到其应用编号、业务编号对应的延迟消息处理装置14中。

线程141,延迟消息读取线程,由延迟消息处理装置14开启,用于定时从数据库12中拉取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列,将消费时间晚于所述当前时间点的所述延迟消息存储到第三队列。

线程142,到期消息转移线程,由延迟消息处理装置14开启,用于将第三队列中消费时间等于当前时间的延迟消息转移存储到第一队列。

线程143,已读消息返回线程,由延迟消息处理装置14开启,用于将第二队列中存储时间超过预设值的延迟消息转移存储到第一队列。

线程141、142、143的数量均与延迟消息处理装置14的数量相同,在一些实施例中,与系统100中的业务模块11的数量相同。

线程144,延迟消息取出指令响应线程,由延迟消息处理装置14开启,用于响应延迟消息取出指令,将第一队列中的目标延迟消息(全部延迟消息)作为该延迟消息取出指令的返回信息返回给网关模块13,然后将第一队列中的目标延迟消息转移存储到第二队列。

线程145,延迟消息消费成功消息响应线程,由延迟消息处理装置14开启,用于响应延迟消息消费成功消息,将第二队列中对应的目标延迟消息批量删除,并对应删除该批目标延迟消息在数据库12中对应的延迟消息。在一些实施例中,线程145还在删除延迟消息后,将该延迟消息处理结果归档记录。

除了系统100运行时持续工作的上述异步线程,系统100启动时还存在集群任务分配线程,用于启动多个延迟消息处理装置14,为每个延迟消息处理装置14分配对应的应用编码和业务编码;延迟消息处理装置14在被启动后,还通过异步线程创建自己的第一队列、第二队列、第三队列。

本公开实施例提供的延迟消息处理系统100及其执行的延迟消息处理方法200,通过使用多个异步线程管理延迟消息,将延迟消息存储到数据库12中,仅将近期使用的延迟消息存储到内存中备用,仅在获取到延迟消息消费成功消息后才删除数据库12中存储的延迟消息,可以在保证延迟消息读取效率的同时,有效提高延迟消息的存储容量,提高延迟消息存储的数据可靠性。

对应于上述方法实施例,本公开还提供一种延迟消息处理装置,可以用于执行上述方法实施例。

图5示意性示出本公开一个示例性实施例中一种延迟消息处理装置的方框图。

参考图5,延迟消息处理装置500可以包括:

消息提取模块51,设置为从数据库中读取消费时间在预设时间段内的多个延迟消息,将消费时间早于或等于所述当前时间点的所述延迟消息存储到第一队列;

消息转存模块52,设置为响应延迟消息取出指令返回所述第一队列中的目标延迟消息,并将所述目标延迟消息从所述第一队列转移存储到第二队列;

消息删除模块53,设置为响应对应于所述目标延迟消息的延迟消息消费成功消息,在所述第二队列和所述数据库中删除所述目标延迟消息。

在本公开的一种示例性实施例中,消息提取模块51设置为:将消费时间晚于所述当前时间点的所述延迟消息存储到第三队列,所述第三队列为带有时间刻度的环形队列;定时将所述第三队列中消费时间早于或等于所述当前时间点的所述延迟消息转移存储到所述第一队列。

在本公开的一种示例性实施例中,消息提取模块51设置为:根据延迟消息识别符从数据库中读取与目标应用编号和目标业务编号对应的多个所述延迟消息。

在本公开的一种示例性实施例中,消息转存模块52设置为:将所述第二队列中存储时长超过预设值的所述延迟消息转移存储到所述第一队列。

在本公开的一种示例性实施例中,消息提取模块51设置为:仅读取消费时间在所述预设时间段内且当前未存储于所述第一队列、所述第二队列、所述第三队列中的多个延迟消息。

由于装置500的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。

所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

下面参照图6来描述根据本发明的这种实施方式的电子设备600。图6显示的电子设备600仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图6所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:上述至少一个处理单元610、上述至少一个存储单元620、连接不同系统组件(包括存储单元620和处理单元610)的总线630。

其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元610执行,使得所述处理单元610执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元610可以执行如图1中所示的步骤。

存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(ROM)6203。

存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。

电子设备600也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备600交互的设备通信,和/或与使得该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器660通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。

在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。

根据本发明的实施方式的用于实现上述方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要求指出。

17页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:批量消息队列的校验方法、电子设备和介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!