CN112925642A - 一种延迟消息处理方法、装置、设备及存储介质 - Google Patents
一种延迟消息处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112925642A CN112925642A CN202110212583.4A CN202110212583A CN112925642A CN 112925642 A CN112925642 A CN 112925642A CN 202110212583 A CN202110212583 A CN 202110212583A CN 112925642 A CN112925642 A CN 112925642A
- Authority
- CN
- China
- Prior art keywords
- message
- delay
- consumer
- expiration
- delayed
- 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
Images
Classifications
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- 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
Abstract
本发明实施例提供了一种延迟消息处理方法、装置、设备及存储介质,所述数据库服务器与消费者和生产者连接,所述方法包括:获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。通过不断根据源消息和重发字段生成延迟消息并放入延迟队列,以及不断通过预设执行命令拉取延迟队列中的到期消息,实现对到期消息中的延迟消息的自动轮询过程,方便且有效地保证针对延迟消息的可靠通知。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种延迟消息处理方法、装置、设备及存储介质。
背景技术
目前主流延迟队列的实现,一种是基于内存的延迟消息存储方式,主要使用时间轮等方式存储延迟消息,然而这种基于内存存储并不可靠;为了实现可靠存储,另一种是使用持久化的组件(例如MYSQL,持久化的Redis等)实现延迟消息的存储。
在获取延迟消息之后,需要保证将消息成功通知到消费者,才可以认为该消息处理成功,并将通知成功的消息从消息队列中清除。针对保证消息通知成功方面,目前现有的一个处理方案是通过一个额外的消息记录表记录正在处理中的消息,如果到期之后仍然没有成功的响应,则需要再通过定时轮询将其重新加入消息队列的方式来实现,然而这种处理方式过于繁杂。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种延迟消息处理方法、装置、设备及存储介质。
为了解决上述问题,本发明实施例公开了一种应用于数据库服务器,所述数据库服务器与消费者和生产者连接,所述方法包括:
获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;
根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;
若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。
可选地,所述到期消息包括源消息和重发字段;所述根据所述到期消息生成延迟消息,包括:
对所述到期消息中的重发字段的值进行加一操作,并根据自增后的重发字段和源消息生成延迟消息。
可选地,所述数据库服务器具有延迟队列服务;所述向所述消费者发送所述延迟消息,包括:
获取当前时间和延迟时间,并根据所述当前时间和延迟时间生成所述延迟消息的到期时间;
将所述延迟消息和所述延迟消息的到期时间写入所述延迟队列;
通过所述延迟队列根据所述到期时间将所述延迟消息异步通知给所述消费者。
可选地,所述若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,包括:
若未接收到所述消费者针对所述延迟消息的响应消息,通过预设执行命令获取到期消息;
当所述到期消息包括所述延迟消息时,根据所述延迟消息中的源消息和重发字段再次生成延迟消息,并向所述消费者发送再次生成的延迟消息。
可选地,还包括:
若接收到所述消费者发送的响应消息,则删除延迟队列中的延迟消息;
或,若未接收到所述消费者发送的响应消息,则在根据所述延迟消息生成延迟消息之后,删除延迟队列中的延迟消息。
可选地,所述延迟队列中不存在相同的延迟消息;其中,具有相同源消息的多个延迟消息中所包含的重发字段不同。
可选地,在获取所述生产者在预设延迟时间内未成功发送给所述消费者的到期消息之前,还包括:
接收所述生产者发送的源消息,并对所述源消息增加重发字段;
将增加重发字段后的源消息写入延迟队列,以便后续根据所述源消息和所述重发字段值生成延迟消息;其中,所述重发字段的初始值为0。
本发明实施例还公开了一种延迟消息处理装置,应用于数据库服务器,所述数据库服务器与消费者和生产者连接,所述装置包括:
到期消息获取模块,用于获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;
第一延迟消息发送模块,用于根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;
第二延迟消息发送模块,用于若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。
可选地,所述到期消息包括源消息和重发字段;所述第一延迟消息发送模块包括:
延迟消息生成子模块,用于对所述到期消息中的重发字段的值进行加一操作,并根据自增后的重发字段和源消息生成延迟消息。
可选地,所述数据库服务器具有延迟队列服务;所述第一延迟消息发送模块包括:
到期时间生成子模块,用于获取当前时间和延迟时间,并根据所述当前时间和延迟时间生成所述延迟消息的到期时间;
到期时间写入子模块,用于将所述延迟消息和所述延迟消息的到期时间写入所述延迟队列;
延迟消息通知子模块,用于通过所述延迟队列根据所述到期时间将所述延迟消息异步通知给所述消费者。
可选地,所述第二延迟消息发送模块包括:
到期消息获取子模块,用于若未接收到所述消费者针对所述延迟消息的响应消息,通过预设执行命令获取到期消息;
延迟消息生成子模块,用于当所述到期消息包括所述延迟消息时,根据所述延迟消息中的源消息和重发字段再次生成延迟消息,并向所述消费者发送再次生成的延迟消息。
可选地,所述第二延迟消息发送模块还包括:
延迟消息删除子模块,用于若接收到所述消费者发送的响应消息,则删除延迟队列中的延迟消息;
延迟消息删除子模块,还用于若未接收到所述消费者发送的响应消息,则在根据所述延迟消息再次生成延迟消息之后,删除延迟队列中的延迟消息。
可选地,所述延迟队列中不存在相同的延迟消息;其中,具有相同源消息的多个延迟消息中所包含的重发字段不同。
可选地,在获取所述生产者在预设延迟时间内未成功发送给所述消费者的到期消息之前,所述装置还包括:
重发字段增加模块,用于接收所述生产者发送的源消息,并对所述源消息增加重发字段;
源消息写入模块,用于将增加重发字段后的源消息写入延迟队列,以便后续根据所述源消息和所述重发字段值生成延迟消息;其中,所述重发字段的初始值为0。
本发明实施例还公开了一种设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现任一项所述延迟消息处理方法的步骤。
本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现任一项所述延迟消息处理方法的步骤。
本发明实施例包括以下优点:
在本发明实施例中,按照到期消息生成延迟消息并向消费者发送延迟消息,以及在未接收到消费者针对延迟消息的响应消息时再次生成新的延迟消息。通过不断根据源消息和重发字段生成延迟消息并放入延迟队列,以及不断通过预设执行命令拉取延迟队列中的到期消息,实现对到期消息中的延迟消息的自动轮询过程,方便且有效地保证针对延迟消息的可靠通知。
附图说明
图1是本发明的一种延迟消息处理方法实施例的步骤流程图;
图2是本发明的另一种延迟消息处理方法实施例的步骤流程图;
图3是本发明实施例中延迟消息处理的应用场景图;
图4是本发明的一种延迟消息处理装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
目前已有的一个处理方案是通过一个额外的消息记录表记录处理中的消息,如果到期之后仍然没有成功的响应再通过定时轮询将其重新加入消息队列的方式来实现。这种处理方式过于繁杂,依赖于一个单独的消息记录表,需要记录每个延迟消息单独的消息ID,同时延长了处理链路,且处理性能也有所下降。
本发明的核心思想之一是通过对到期消息的延迟消息的自动轮询过程,实现方便且有效保证针对延迟消息的可靠通知。
参照图1,示出了本发明的一种延迟消息处理方法实施例的步骤流程图,应用于数据库服务器,所述数据库服务器与消费者和生产者连接,具体可以包括如下步骤:
步骤101,获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;
在本发明实施例中,可以应用于Redis数据库服务器,Redis数据库服务器具有运行速度快、数据可持久化等特点,通常可以使用Redis的sorted set结构作为用于存放延迟消息的数据结构,即将sorted set结构作为延迟队列,以存放不同服务之间传输的数据(即消息)。
在具体实现中,在延迟队列里所存放的消息可以为延迟消息,延迟消息指的是生产者生产的消息并不希望立即投递给消费者,而是在等待一定的时间之后再投递给消费者的一类消息。
其中,所获取的到期消息可以为生产者在预设延迟时间阈值内未成功发送给消费者的消息,即该到期消息可以指的是在发送生产者所生成的消息后的预设延迟时间阈值内还未接收到消费者所返回响应的消息。需要说明的是,生产者可以为用于产生消息的服务的统称,消费者可以为用于接收消息的服务的统称。
在本发明的一种实施例中,可以通过预设执行命令获取到期消息。具体的,为了获取在延迟队列中已到期但未成功通知到消费者的过期消息,可以通过Redis数据库服务器不断循环扫描sorted set即可实时获得到期的延迟消息。
在实际应用中,Redis数据库服务器的不断循环扫描可以通过不断调用和/或执行预设命令实现,该预设命令可以为Zrangebyscore命令,即可以通过Zrangebyscore命令扫描出已到期的消息列表。
具体的,Zrangebyscore命令的命令原型可以为ZRANGEBYSCORE key min max[WITHSCORES][LIMIT offset count],该命令可以将返回分数在min和max之间的所有成员,即满足表达式min<=score<=max的成员,其中返回的成员是按照其分数从低到高的顺序返回,如果成员具有相同的分数,则按成员的字典顺序返回。可选参数LIMIT用于限制返回成员的数量范围。可选参数offset用于表示从符合条件的第offset个成员开始返回,同时返回count个成员。那么,在执行Zrangebyscore命令之后,其返回值为返回score值(即消息到期时间)在指定范围内的成员(即消息体)列表。
其中,执行上述命令的时间复杂度为O(log(N)+M),N表示Sorted Set中成员的数量,M则表示返回的成员数量。
在一种优选的实施例中,Redis数据库服务器所具有的延迟队列服务的内部可以设置一个线程,用于不断调用Zrangebyscore命令获取到期消息。
步骤102,根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;
在本发明的一种实施例中,可以根据到期消息生成延迟消息,并向消费者发送延迟消息。
在具体实现中,一般可以将所生成的延迟消息写入延迟队列,以通过延迟队列对延迟消息进行发送。
一般而言,Redis的sorted set结构为字符串的集合,可以包括member和与其关联的score值,在将其作为延迟队列时,可以将sorted set结构中的member作为消息体,score值作为消息的到期时间。
其中,作为member的消息体的消息不可重复,与score值关联,而作为score值的消息到期时间可以为重复的值,延迟队列中所存放的延迟消息为有序的,那么Redis可以通过score值(即消息到期时间)距离当前时间的间隔时间为集合中的member(即消息体)进行从小到大的排序。
需要说明的是,在不同的情况下针对间隔时间的取值可能不同,当某个消息体超期时,其间隔时间可以为负数;当某个消息体未超期时,其间隔时间可以为正数。
步骤103,若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。
其中,Redis可以按照延迟消息的消息到期时间向消费者发送延迟消息,一般而言,若消费者(即接收方)成功接收到该延迟消息,那么可以回复响应(简称ACK)数据,若在调用下游服务在指定时间内没有得到反应,则表示针对延迟消息出现超时现象,此时消费者并未成功接收到所发送的延迟消息。
在实际应用中,可以判断是否接收到消费者针对延迟消息的响应消息,以便判定所发送的延迟消息是否出现超时现象。
在本发明的一种实施例中,在未接收到消费者针对延迟消息的响应消息的情况下,为了保证对延迟队列中延迟消息的可靠通知,可以对到期消息的延迟消息进行自动轮询,具体为不断调用和/或执行Zrangebyscore命令实现。
其中,由于网络等问题消息不一定能够一次调用便成功通知到消费者,对延迟消息的可靠通知可以指的是通过重试等策略保证延迟消息最终能够到达消费者。
在具体实现中,在不断通过Zrangebyscore命令扫描出已到期的消息列表之后,可以不断根据到期消息(即已到期的延迟消息)中所包含的源消息和消息的到期时间生成延迟消息,然后再向消费者发送延迟消息,并判断是否接收到消费者针对延迟消息的响应消息,若未接收到响应消息,则不断重复上述步骤,直至接收到消费者发送的针对新的延迟消息的响应消息为止。
在本发明实施例中,按照到期消息生成延迟消息并向消费者发送延迟消息,以及在未接收到消费者针对延迟消息的响应消息时再次生成新的延迟消息。通过不断根据源消息和重发字段生成延迟消息并放入延迟队列,以及不断通过预设执行命令拉取延迟队列中的到期消息,实现对到期消息中的延迟消息的自动轮询过程,方便且有效地保证针对延迟消息的可靠通知。
参照图2,示出了本发明的另一种延迟消息处理方法实施例的步骤流程图,应用于数据库服务器,所述数据库服务器与消费者和生产者连接,具体可以包括如下步骤:
步骤201,接收生产者发送的源消息,并将所接收的源消息写入延迟队列服务;
在本发明的一种实施例中,Redis数据库服务器可以与生产者连接,可以接收所述生产者发送的源消息,并对源消息增加重发字段,并将增加重发字段后的源消息写入延迟队列,以便后续根据源消息和重发字段的值生成延迟消息;其中,所述重发字段的初始值为0。
其中,延迟队列中不存在相同的延迟消息,具体可以表现为具有相同源消息的多个延迟消息中所包含的重发字段不同。
在实际应用中,Redis数据库服务器可以接收生产者发送的源消息,该源消息为生产者产生的消息。其中,生产者可以将所产生的源消息发送给延迟队列服务,Redis的延迟队列服务可以生成延迟消息,所生成的延迟消息可以增加有用于记录第几次重试发送的重发retry_count字段,该字段值可以为0,并将延迟消息写入Redis的延迟队列,返回生产者成功。生产者接收到成功的回包,即可认为写入成功,延迟队列服务会保证将此消息发送给消费者。
在具体实现中,采用Redis的sorted set结构作为延迟队列,sorted set将会对member(即延迟消息的消息体)进行去重操作,即在延迟队列中不会存在同样的两个延迟消息。由于延迟队列中的延迟消息可以由源消息和一个整型字段(字段名为retry_count,初始值为0),在存在同样的两个源消息的情况下,只要retry_count字段不同即可,即通过不同字段保证延迟消息的不同。
步骤202,通过不断调用Zrangebyscore命令获取到期消息,并将到期消息通知消费者;
具体的,延迟队列服务内部可以设置有一个线程,用于不断调用Zrangebyscore命令获取到期消息,即到期的延迟消息。
对于读取到的到期的延迟消息,可以按照到期消息生成延迟消息,到期消息可以包括源消息和重发字段,具体可以根据源消息和重发字段生成延迟消息。
其中,到期的延迟消息内所包含的源消息和重发retry_count字段生成延迟消息,生成的步骤可以是将到期消息中的重发字段的值自增1(即加1操作),并根据自增后的重发字段和源消息生成延迟消息。
在实际应用中,延迟队列中的消息体与消息到期时间关联,在根据到期消息生成延迟消息的同时或之后,还可以给所生成的延迟消息生成一个到期时间,可以获取当前时间和延迟时间,并根据当前时间和延迟时间生成延迟消息的到期时间,然后再将延迟消息和延迟消息的到期时间写入延迟队列,以便可以通过延迟队列根据到期时间将延迟消息异步通知给消费者。
具体的,所生成的到期时间需要大于当前时间加上通知下游消费者的超时时间的时间值,然后将所生成的延迟消息和消息到期时间写入延迟队列。
其中,通知下游消费者的超时时间可以指的是发送消息时调用下游服务的指定时间,即针对发送的消息所要延迟的时间,所要延迟的时间可以由生产者自定义,对此,本发明实施例不加以限制。
步骤203,若未接收到消费者针对延迟消息的响应消息,则继续根据延迟消息生成新的延迟消息,并向消费者通知新的延迟消息,直至接收到消费者发送的针对新的延迟消息的响应消息。
在本发明的一种实施例中,可以将所生成的延迟消息通知消费者,具体表现为异步将延迟消息通知消费者,所通知给消费者的消息在本质上为生产者产生的源消息。
在将延迟消息通知到消费者之后,可以判断是否接收到所述消费者针对所述延迟消息的响应消息。
在一种情况下,若消费者(即接收方)成功接收到该延迟消息,那么可以回复响应(简称ACK)数据,即当Redis的延迟队列服务接收到消费者的成功响应时,表示消费者已经成功接收到该延迟消息,已实现对该延迟消息的可靠通知。
在另一种情况下,若在按照预设延迟时间发送延迟消息后的预设时间阈值内未接收到所述消费者针对延迟消息的响应消息,则继续根据延迟消息生成新的延迟消息,并向消费者通知新的延迟消息,直至接收到消费者发送的针对新的延迟消息的响应消息,以对到期消息的延迟消息进行自动轮询,保证实现对该延迟消息的可靠通知。
其中,若未接收到消费者针对所述延迟消息的响应消息,可以继续通过预设执行命令(可以为Zrangebyscore命令)获取到期消息;若到期消息包括符合到期时间的延迟消息时,则根据延迟消息中的源消息和重发字段生成新的延迟消息,具体可以表现为对重发字段的值自增1后得到新的延迟消息。
在一种优选的实施例中,若接收到消费者针对延迟消息的响应消息,则可以删除延迟队列中已通知给消费者的延迟消息;或,若未接收到消费者针对延迟消息的响应消息,则可以在根据到期的延迟消息生成新的延迟消息之后,再删除延迟队列中已通知给消费者但为接收到消费者返回的响应消息的延迟消息。
在本发明实施例中,按照到期消息中生成延迟消息并向消费者发送延迟消息,以及在未接收到消费者针对延迟消息的响应消息时再次生成新的延迟消息。通过不断根据源消息和重发字段生成延迟消息并放入延迟队列,以及不断通过预设执行命令拉取延迟队列中的到期消息,实现对到期消息中的延迟消息的自动轮询过程,方便且有效地保证针对延迟消息的可靠通知。
参照图3,示出了本发明实施例中延迟消息处理的应用场景图,涉及到生产者—Redis数据库—消费者,其包括以下三个阶段:生产者写入消息阶段、获取到期消息通知消费者阶段、消费者通知回调阶段。
在生产者写入消息阶段,生产者可以将源消息S发送给延迟队列服务,延迟队列服务再生成延迟消息A(添加retry_count字段,字段值为0),写入Redis,返回生产者成功;当生产者接收到写入成功的回包时,即可认为写入成功,延迟队列服务会保证将此消息发送给消费者。
在获取到期消息通知消费者阶段,延迟队列服务内部会有一个线程,不断调用Zrangebyscore命令获取到期消息。假设所读取到的到期消息为延迟消息A,对于所读取到的延迟消息A,可以执行如下操作步骤:(1)将retry_count字段值自增+1,生成一个新的延迟消息B,即表示将要第1次重试发送延迟消息A中的源消息;(2)为延迟消息B生成一个到期时间,到期时间要大于当前时间+通知下游消费者的超时时间,并将延迟消息B写入延迟队列;(3)异步将源消息S通知消费者,以及删除延迟队列中的A消息。
在消费者通知回调阶段,当收到消费者的成功响应时,则删除延迟队列中的B消息,延迟消息B所对应的实质上是源消息S,这里返回成功即表明源消息S已完成通知,可以对延迟消息B进行删除;如果没有收到成功响应,延迟消息B将会在之后的某次扫描被读取到,即存在已到期消息列表中,这时候的延迟消息B可以相当于在获取到期消息通知消费者阶段中的延迟消息A,对于所读取到的延迟消息B的处理步骤可以如下:扫描获取延迟消息B,生成延迟消息C写回延迟队列(retry_count+1),异步将源消息S通知消费者,删除延迟队列中的B消息,如果收到C消息的成功响应则删除C消息,否则不做处理。C消息会在之后的扫描被处理,处理流程同上。
需要说明的是,源消息S一开始是存储在延迟消息A中,如果通知消费者一直没有接收到其返回的成功响应消息的话,那么源消息S的存储将会转移到B、C、D、E……。无论如何对所存储的S进行转移,只要未收到消费者的成功响应,则将不会丢弃源消息S。
作为一种示例,当游戏状态值需要定时更新广播时,上述的源消息可以为某个更新后的游戏状态值,将此更新后的游戏状态值增加重发字段后得到延迟消息并写入延迟队列,该延迟队列中可以存在与延迟消息关联的到期时间,到期时间可以包括延迟时间,在本示例中,延迟时间可以为更新广播的定时时间,在未定时更新成功的情况下,可以对该延迟消息中的重发字段进行加一操作后再按照到期时间中的定时时间通知进行广播更新,其中,可以不断重复判断是否定时更新广播成功以及在未定时更新成功的情况下再次生成新的延迟消息步骤,直至定时更新成功为止。
上述延迟消息处理方案还可以应用于各种其他需要对延迟消息进行通知的应用场景,例如当某个应用的用户未对某个数据进行处理时系统可以通过上述对延迟消息的可靠存储和不断重试机制的方式实现自动处理等。
在本发明实施例中,通过由源消息和重发字段组合生成延迟消息并写延迟队列,以异步按照延迟队列将延迟消息通知给消费者,实现了对延迟消息的可靠存储;以及,通过不断调用Zrangebyscore命令获取到期的延迟消息和生成新的延迟消息,直至接收到消费者发送的针对新的延迟消息的响应消息为止,实现了不断重试的机制。即通过上述可靠存储和不断重试的机制实现了最终通知的可靠保证。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图4,示出了本发明的一种延迟消息处理装置实施例的结构框图,应用于数据库服务器,所述数据库服务器与消费者和生产者连接,具体可以包括如下模块:
到期消息获取模块401,用于获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;
第一延迟消息发送模块402,用于根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;
第二延迟消息发送模块403,用于若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。
在本发明的一种实施例中,所述到期消息包括源消息和重发字段;第一延迟消息发送模块402可以包括如下子模块:
延迟消息生成子模块,用于对所述到期消息中的重发字段的值进行加一操作,并根据自增后的重发字段和源消息生成延迟消息。
在本发明的一种实施例中,所述数据库服务器具有延迟队列服务;第一延迟消息发送模块402可以包括如下子模块:
到期时间生成子模块,用于获取当前时间和延迟时间,并根据所述当前时间和延迟时间生成所述延迟消息的到期时间;
到期时间写入子模块,用于将所述延迟消息和所述延迟消息的到期时间写入所述延迟队列;
延迟消息通知子模块,用于通过所述延迟队列根据所述到期时间将所述延迟消息异步通知给所述消费者。
在本发明的一种实施例中,第二延迟消息发送模块403可以包括如下子模块:
到期消息获取子模块,用于若未接收到所述消费者针对所述延迟消息的响应消息,通过预设执行命令获取到期消息;
延迟消息生成子模块,用于当所述到期消息包括所述延迟消息时,根据所述延迟消息中的源消息和重发字段再次生成延迟消息,并向所述消费者发送再次生成的延迟消息。
在本发明的一种实施例中,第二延迟消息发送模块403还可以包括如下子模块:
延迟消息删除子模块,用于若接收到所述消费者发送的响应消息,则删除延迟队列中的延迟消息;
延迟消息删除子模块,还用于若未接收到所述消费者发送的响应消息,则在根据所述延迟消息再次生成延迟消息之后,删除延迟队列中的延迟消息。
在本发明的一种实施例中,所述延迟队列中不存在相同的延迟消息;其中,具有相同源消息的多个延迟消息中所包含的重发字段不同。
在本发明的一种实施例中,在获取所述生产者在预设延迟时间内未成功发送给所述消费者的到期消息之前,所述装置还可以包括如下模块:
重发字段增加模块,用于接收所述生产者发送的源消息,并对所述源消息增加重发字段;
源消息写入模块,用于将增加重发字段后的源消息写入延迟队列,以便后续根据所述源消息和所述重发字段值生成延迟消息;其中,所述重发字段的初始值为0。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种设备,包括:
包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述延迟消息处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述延迟消息处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如和等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种延迟消息处理方法、装置、设备及存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种延迟消息处理方法,其特征在于,应用于数据库服务器,所述数据库服务器与消费者和生产者连接,所述方法包括:
获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;
根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;
若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。
2.根据权利要求1所述的方法,其特征在于,所述到期消息包括源消息和重发字段;所述根据所述到期消息生成延迟消息,包括:
对所述到期消息中的重发字段的值进行加一操作,并根据自增后的重发字段和源消息生成延迟消息。
3.根据权利要求1所述的方法,其特征在于,所述数据库服务器具有延迟队列服务;所述向所述消费者发送所述延迟消息,包括:
获取当前时间和延迟时间,并根据所述当前时间和延迟时间生成所述延迟消息的到期时间;
将所述延迟消息和所述延迟消息的到期时间写入所述延迟队列;
通过所述延迟队列根据所述到期时间将所述延迟消息异步通知给所述消费者。
4.根据权利要求1所述的方法,其特征在于,所述若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,包括:
若未接收到所述消费者针对所述延迟消息的响应消息,通过预设执行命令获取到期消息;
当所述到期消息包括所述延迟消息时,根据所述延迟消息中的源消息和重发字段再次生成延迟消息,并向所述消费者发送再次生成的延迟消息。
5.根据权利要求4所述的方法,其特征在于,还包括:
若接收到所述消费者发送的响应消息,则删除延迟队列中的延迟消息;
或,若未接收到所述消费者发送的响应消息,则在再次生成延迟消息之后,删除延迟队列中的延迟消息。
6.根据权利要求1所述的方法,其特征在于,所述延迟队列中不存在相同的延迟消息;其中,具有相同源消息的多个延迟消息中所包含的重发字段不同。
7.根据权利要求1所述的方法,其特征在于,在获取所述生产者在预设延迟时间内未成功发送给所述消费者的到期消息之前,还包括:
接收所述生产者发送的源消息,并对所述源消息增加重发字段;
将增加重发字段后的源消息写入延迟队列,以便后续根据所述源消息和所述重发字段值生成延迟消息;其中,所述重发字段的初始值为0。
8.一种延迟消息处理装置,其特征在于,应用于数据库服务器,所述数据库服务器与消费者和生产者连接,所述装置包括:
到期消息获取模块,用于获取由所述生产者生成且在预设延迟时间阈值内未成功发送给所述消费者的到期消息;
第一延迟消息发送模块,用于根据所述到期消息生成延迟消息,并向所述消费者发送所述延迟消息;
第二延迟消息发送模块,用于若未接收到所述消费者发送的针对所述延迟消息的响应消息,则再次向所述消费者发送所述延迟消息,直至接收到所述消费者发送的针对所述延迟消息的响应消息为止。
9.一种设备,其特征在于,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1-7中任一项所述延迟消息处理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述延迟消息处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110212583.4A CN112925642A (zh) | 2021-02-25 | 2021-02-25 | 一种延迟消息处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110212583.4A CN112925642A (zh) | 2021-02-25 | 2021-02-25 | 一种延迟消息处理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112925642A true CN112925642A (zh) | 2021-06-08 |
Family
ID=76171930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110212583.4A Pending CN112925642A (zh) | 2021-02-25 | 2021-02-25 | 一种延迟消息处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112925642A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113260020A (zh) * | 2021-06-22 | 2021-08-13 | 浩鲸云计算科技股份有限公司 | 延迟队列实现5g切片成员签约及去签约的方法及系统 |
CN113568976A (zh) * | 2021-07-28 | 2021-10-29 | 瑞幸咖啡信息技术(厦门)有限公司 | 一种延迟消息的处理系统、方法、设备和存储介质 |
CN114363268A (zh) * | 2022-01-12 | 2022-04-15 | 平安普惠企业管理有限公司 | 消息延迟消费方法及相关产品 |
CN114945005A (zh) * | 2022-05-24 | 2022-08-26 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种消息处理方法及相关设备 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250250A (zh) * | 2016-08-09 | 2016-12-21 | 广州唯品会信息科技有限公司 | 数据通信方法及装置 |
CN107682324A (zh) * | 2017-09-20 | 2018-02-09 | 华胜信泰信息产业发展有限公司 | 消息传输方法、系统、存储介质及计算机设备 |
CN109743137A (zh) * | 2019-01-10 | 2019-05-10 | 浙江小泰科技有限公司 | 一种支持更新的分布式延迟消息队列处理系统 |
CN110247739A (zh) * | 2018-03-08 | 2019-09-17 | 香港乐蜜有限公司 | 一种消息传输方法及装置 |
CN110636130A (zh) * | 2019-09-23 | 2019-12-31 | 上海钧正网络科技有限公司 | 延时消息处理方法、装置、计算机设备和存储介质 |
CN110968431A (zh) * | 2018-09-28 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 一种消息处理方法、装置及设备 |
CN111124653A (zh) * | 2019-12-31 | 2020-05-08 | 江苏满运软件科技有限公司 | 延迟消息处理方法、系统、设备和存储介质 |
CN111225041A (zh) * | 2019-12-26 | 2020-06-02 | 的卢技术有限公司 | 一种实现延时消息队列的方法及系统 |
CN111510469A (zh) * | 2019-01-31 | 2020-08-07 | 上海哔哩哔哩科技有限公司 | 一种消息处理方法和装置 |
CN111897825A (zh) * | 2020-06-01 | 2020-11-06 | 中国人民财产保险股份有限公司 | 分布式事务处理方法和装置 |
CN112104519A (zh) * | 2020-08-06 | 2020-12-18 | 北京健康之家科技有限公司 | 延迟消息的投递方法及装置、存储介质、计算机设备 |
CN112148504A (zh) * | 2020-09-15 | 2020-12-29 | 海尔优家智能科技(北京)有限公司 | 目标消息的处理方法及装置、存储介质及电子装置 |
-
2021
- 2021-02-25 CN CN202110212583.4A patent/CN112925642A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250250A (zh) * | 2016-08-09 | 2016-12-21 | 广州唯品会信息科技有限公司 | 数据通信方法及装置 |
CN107682324A (zh) * | 2017-09-20 | 2018-02-09 | 华胜信泰信息产业发展有限公司 | 消息传输方法、系统、存储介质及计算机设备 |
CN110247739A (zh) * | 2018-03-08 | 2019-09-17 | 香港乐蜜有限公司 | 一种消息传输方法及装置 |
CN110968431A (zh) * | 2018-09-28 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 一种消息处理方法、装置及设备 |
CN109743137A (zh) * | 2019-01-10 | 2019-05-10 | 浙江小泰科技有限公司 | 一种支持更新的分布式延迟消息队列处理系统 |
CN111510469A (zh) * | 2019-01-31 | 2020-08-07 | 上海哔哩哔哩科技有限公司 | 一种消息处理方法和装置 |
CN110636130A (zh) * | 2019-09-23 | 2019-12-31 | 上海钧正网络科技有限公司 | 延时消息处理方法、装置、计算机设备和存储介质 |
CN111225041A (zh) * | 2019-12-26 | 2020-06-02 | 的卢技术有限公司 | 一种实现延时消息队列的方法及系统 |
CN111124653A (zh) * | 2019-12-31 | 2020-05-08 | 江苏满运软件科技有限公司 | 延迟消息处理方法、系统、设备和存储介质 |
CN111897825A (zh) * | 2020-06-01 | 2020-11-06 | 中国人民财产保险股份有限公司 | 分布式事务处理方法和装置 |
CN112104519A (zh) * | 2020-08-06 | 2020-12-18 | 北京健康之家科技有限公司 | 延迟消息的投递方法及装置、存储介质、计算机设备 |
CN112148504A (zh) * | 2020-09-15 | 2020-12-29 | 海尔优家智能科技(北京)有限公司 | 目标消息的处理方法及装置、存储介质及电子装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113260020A (zh) * | 2021-06-22 | 2021-08-13 | 浩鲸云计算科技股份有限公司 | 延迟队列实现5g切片成员签约及去签约的方法及系统 |
CN113260020B (zh) * | 2021-06-22 | 2021-09-28 | 浩鲸云计算科技股份有限公司 | 延迟队列实现5g切片成员签约及去签约的方法及系统 |
CN113568976A (zh) * | 2021-07-28 | 2021-10-29 | 瑞幸咖啡信息技术(厦门)有限公司 | 一种延迟消息的处理系统、方法、设备和存储介质 |
CN114363268A (zh) * | 2022-01-12 | 2022-04-15 | 平安普惠企业管理有限公司 | 消息延迟消费方法及相关产品 |
CN114363268B (zh) * | 2022-01-12 | 2023-12-22 | 深圳市天一泓科技有限公司 | 消息延迟消费方法及相关产品 |
CN114945005A (zh) * | 2022-05-24 | 2022-08-26 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种消息处理方法及相关设备 |
CN114945005B (zh) * | 2022-05-24 | 2024-02-06 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种消息处理方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112925642A (zh) | 一种延迟消息处理方法、装置、设备及存储介质 | |
CN109547511B (zh) | 一种web消息实时推送方法、服务器、客户端及系统 | |
CN110222091A (zh) | 一种海量数据实时统计分析方法 | |
CN109391646B (zh) | 消息中间件消息获取方法、装置和系统 | |
US20120159514A1 (en) | Conditional deferred queuing | |
CN108737218B (zh) | 一种消息推送到达率的自动校验方法及装置 | |
CN109873863B (zh) | 服务的异步调用方法和装置 | |
US8874675B2 (en) | Message thread management using dynamic pointers | |
KR20190057818A (ko) | 차등적인 IoT 서비스를 제공하는 우선순위 기반의 MQTT 시스템 및 방법 | |
CN110968431A (zh) | 一种消息处理方法、装置及设备 | |
CN104965873A (zh) | 一种分页查询方法及装置 | |
CN108536544B (zh) | 基于数据库消息队列的消费方法、装置、服务器和介质 | |
CN109428682B (zh) | 一种消息处理确认方法及装置 | |
WO2022211724A1 (en) | Method and apparatus for transmitting messages, and device and storage medium thereof | |
CN108259595A (zh) | 一种服务间异步调用的方法及系统 | |
US20160117242A1 (en) | Optimization of non-volatile memory in message queuing | |
CN111884769B (zh) | 消息同步方法及装置 | |
CN111415259B (zh) | 交易排队方法、设备和存储介质 | |
CN110837573B (zh) | 分布式音频文件存储与读取方法及系统 | |
US10735357B1 (en) | Cross-platform messaging system | |
CN108986792B (zh) | 用于语音对话平台的语音识别模型的训练调度方法及系统 | |
CN112367382A (zh) | 一种文件上传方法、装置、设备及存储介质 | |
CN111524529B (zh) | 音频数据处理方法、装置和系统、电子设备及存储介质 | |
CN111461868B (zh) | 网点排队方法、装置、计算机设备及可读存储介质 | |
CN108833298B (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 |