CN112181671B - 一种延时消息处理的方法及装置 - Google Patents
一种延时消息处理的方法及装置 Download PDFInfo
- Publication number
- CN112181671B CN112181671B CN201910591002.5A CN201910591002A CN112181671B CN 112181671 B CN112181671 B CN 112181671B CN 201910591002 A CN201910591002 A CN 201910591002A CN 112181671 B CN112181671 B CN 112181671B
- Authority
- CN
- China
- Prior art keywords
- message
- delay
- file system
- metadata
- storage
- 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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- 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/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种延时消息处理的方法,所述方法包括:利用消息队列缓存接收的延时消息;在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息。提高了延时消息的接收速度,而且不需要写入数据库后再发送应答消息,提高了应答消息的反馈速度,减少了延时消息发送端在发出延时消息后的等待时间。本发明还公开了一种延时消息处理的装置。
Description
技术领域
本发明涉及信息处理技术,尤其涉及一种延时消息处理的方法及装置。
背景技术
延时消息有别于定时任务,定时任务是有固定的周期并且有明确的执行触发时间,但是延时消息一般没有固定的开始时间,延时消息通常是由业务***的事件触发,间隔指定的时间之后再触发另外一个事件。软件开发流程中会经常遇到这样的需求,比如:
场景一:订购***中用户已经下单,但是用户还未付款,这个时候就需要***能够提供延时消息的能力,在一段时间之后主动关闭用户订单,释放产品库存。
场景二:产品在上架初期为了吸引客户,推出一周免费试用,在用户试用期结束前一段时间内需要主动提醒用户将试用产品转商用。
现有的延时消息实现方式是将消息记录到数据库中,然后起新线程扫描数据库,查询到超时的消息则触发相应的处理逻辑。延时消息存储在数据库中,消息发送端需要等待消息入库后方可返回处理剩下的逻辑,消息发送端会随着并发的增大出现性能瓶颈。
发明内容
本发明实施例提供一种延时消息处理的方法和装置。
本发明实施例提供一种延时消息处理的方法,包括:
利用消息队列缓存接收的延时消息;
在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息。
上述方案中,还包括:
将所述消息队列的所述延时消息转存到文件***;
从所述文件***中获取待消费的延时消息。
上述方案中,所述利用消息队列缓存接收的延时消息,包括:
将所述延时消息存入所述消息队列中第一主题对应的第一存储位置;
所述将所述消息队列的所述延时消息转存到文件***,包括:
将所述第一存储位置的延时消息移动到所述文件***中。
上述方案中,所述从所述文件***中获取待消费的延时消息,包括:
获取所述待消费的延时消息的第二主题,将所述文件***中的延时消息写入所述消息队列中所述第二主题对应的第二存储位置;
从所述消息队列中所述第二主题对应的第二存储位置获取待消费的延时消息;
或者,将所述文件***中的待消费的延时消息发送给消费对象。
上述方案中,所述将所述消息队列的所述延时消息转存到文件***,包括:
将所述延时消息的消息数据存储在所述文件***中,
确定所述消息数据的元数据,其中,所述元数据包括:所述消息数据的消息标识ID、延时时长及所述消息数据存储在所述文件***中的偏移量;
在所述文件***中存储所述元数据。
上述方案中,所述在所述文件***中存储所述元数据,包括:
根据所述延时时长除以N个预设单位时间的余数i,将所述元数据存入环形数据结构的第i个存储位置,其中,N为所述环形数据结构的存储位置数量,所述环形数据结构的存储位置编号从0至N-1,0≤i≤N-1,且i和N为整数。
上述方案中,还包括:
当延时的实际延时到达所述延时时长后,从所述第i个存储位置获取所述元数据。
上述方案中,所述在所述文件***中存储所述元数据,还包括:如果所述第i个存储位置已经有其他元数据,则按照链式存储结构将所述元数据和所述其他元数据存入所述第i个存储位置的不同存储节点。
上述方案中,还包括:
删除所述文件***中已消费的延时消息。
本发明实施例提供一种延时消息处理的装置,包括:
接收模块,用于利用消息队列缓存接收的延时消息;
所述接收模块,还用于在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息。
上述方案中,所述装置还包括:
存储模块,用于将所述消息队列的所述延时消息转存到文件***;
转发模块,用于从所述文件***中获取待消费的延时消息。
上述方案中,所述转发模块,具体用于:将所述延时消息存入所述消息队列中第一主题对应的第一存储位置;对应地,所述存储模块,具体用于:将所述第一存储位置的延时消息移动到所述文件***中;
或者,所述转发模块,具体用于:获取所述待消费的延时消息的第二主题,将所述文件***中的延时消息写入所述消息队列中所述第二主题对应的第二存储位置;从所述消息队列中所述第二主题对应的第二存储位置获取待消费的延时消息;
或者,所述转发模块,具体用于:将所述文件***中的待消费的延时消息发送给消费对象。
上述方案中,所述存储模块,还具体用于:
将所述延时消息的消息数据存储在所述文件***中,
确定所述消息数据的元数据,其中,所述元数据包括:所述消息数据的消息标识ID、延时时长及所述消息数据存储在所述文件***中的偏移量;
在所述文件***中存储所述元数据。
上述方案中,所述存储模块,还具体用于:根据所述延时时长除以N个预设单位时间的余数i,将所述元数据存入环形数据结构的第i个存储位置,其中,N为所述环形数据结构的存储位置数量,所述环形数据结构的存储位置编号从0至N-1,0≤i≤N-1,且i和N为整数。
本发明实施例提供的延时消息处理的方法,利用消息队列缓存接收的延时消息;在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息;相对于现有技术中通过数据库接收延时消息,本发明不需要将延时消息写入数据库后再通知发送应答消息,通过消息队列的缓存即可完成延时消息的接收,提高了延时消息的接收速度,而且不需要写入数据库后再发送应答消息,提高了应答消息的反馈速度,减少了延时消息发送端在发出延时消息后的等待时间,提高了延时消息发送端并发增大时的处理效率。
附图说明
附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。
图1为本发明实施例一种延时消息处理的方法流程示意图;
图2为本发明又一实施例一种延时消息处理的方法流程示意图;
图3为本发明实施例一种延时消息处理的装置结构示意图;
图4为本发明实施例环形数据结构的效果模拟示意图;
图5为本发明实施例延时消息处理时序示意图。
具体实施方式
为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。
本发明实施例提供一种延时消息处理的方法,如图1所示,包括:
步骤101,利用消息队列缓存接收的延时消息。
在一些实施例中,所述步骤101包括通过使用消息队列中间件来接收延时消息;相对于现有技术中通过写入数据库来接收延时消息,本发明利用消息队列缓存接收的延时消息,提高了延时消息的接收速度。
步骤102,在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息。
所述应答消息用于向发送所述延时消息的终端反馈已接收到所述延时消息。
上述实施例中,将延迟消息的接收与写入数据库等功能进行解耦合,提高了应答消息的反馈速度,减少了延时消息发送端等待应答消息的时间,进而提高了延时消息发送端并发增大时的处理效率。
发送延时消息的终端,可以是用户端或平台端等可用于发送延时消息的终端设备,如:手机、平板电脑、计算机、智能家电、服务器等。
本发明又一实施例提供一种延时消息处理的方法,如图2所示,包括:
步骤201,利用消息队列缓存接收的延时消息。
步骤202,在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息。
步骤203,将所述消息队列的所述延时消息转存到文件***。
消息队列是在消息的传输过程中保存消息的容器,本发明中,使用消息队列缓存接收的延时消息,实现延时消息的快速接收;将所述延时消息转存到文件***,可以在文件***中对所述延时消息进一步处理。相对于将延时消息写入数据库,数据库的查询时间会随着数据量的增大而增大,本发明中将延时消息保存在文件***中,减少了写入数据库的数据处理环节,并且进一步减少了在后续查找延时消息数据时查询数据库的工作量,提高了延时消息的处理效率。
在一些实施例中,所述步骤201包括:
将所述延时消息存入所述消息队列中第一主题对应的第一存储位置。
所述步骤203包括:
将所述第一存储位置的延时消息移动到所述文件***中。相当于将所述延时消息保存到所述文件***中后,将所述第一存储位置的延时消息移动到所述文件***中,将第一存储位置消息写入到文件***之后,同步删除所述消息队列中的所述延时消息。
具体地,第一主题包括延时消息主题(topic),第一主题对应的第一存储位置,包括消息队列中标记为延时消息topic的存储位置。
步骤204,从所述文件***中获取待消费的延时消息。
在一些实施例中,所述步骤204包括:
获取所述待消费的延时消息的第二主题,将所述文件***中的延时消息写入所述消息队列中所述第二主题对应的第二存储位置;
从所述消息队列中所述第二主题对应的第二存储位置获取待消费的延时消息。
具体地,第二主题包括延时消息的目标topic,第二主题对应的第二存储位置,包括消息队列中标记为目标topic的存储位置。目标topic可以为多个,每个延时消息可以对应其中一个指定的目标topic。
在一些实施例中,所述步骤204包括:
将所述文件***中的待消费的延时消息发送给消费对象。
消费对象包括所述延时消息对应的目标接收终端。
在一些实施例中,所述步骤203包括:
将所述延时消息的消息数据存储在所述文件***中;
确定所述消息数据的元数据,其中,所述元数据包括:所述消息数据的消息标识ID、延时时长及所述消息数据存储在所述文件***中的偏移量;
在所述文件***中存储所述元数据。
元数据,又称中介数据、中继数据,为描述数据的数据,主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。相对于完整的延时数据,元数据由于没有包含消息数据,因此数据量较小;将消息数据存储在文件***中,利用元数据进行延时时长的计时、查找对应消息数据,可以有效减少在延时消息处理过程中处理的数据量,进一步提高了延时消息的处理效率。
在一些实施例中,所述在所述文件***中存储所述元数据,包括:
根据所述延时时长除以N个预设单位时间的余数i,将所述元数据存入环形数据结构的第i个存储位置,其中,N为所述环形数据结构的存储位置数量,所述环形数据结构的存储位置编号从0至N-1,0≤i≤N-1,且i和N为整数。
其中,所述预设单位时间,可以根据实际应用需要进行设置,例如:秒、分钟、小时等常用单位时间;在一些特殊场景中以若干秒(例如5秒、10秒等)为一个单位时间;以及在一些精密仪器或***中以毫秒、微秒、纳秒为单位时间等。这里只是举例说明,并非对本发明中所述预设单位时间的具体限定,技术人员可以根据需求来选择合理的时间长度作为预设单位时间。
在一些实施例中,所述环形数据结构为逻辑结构。所述逻辑结构具体包括但不限定是:环形队列。
在一些实施例中,当延时的实际延时到达所述延时时长后,从所述第i个存储位置获取所述元数据。
由于采用了环形数据结构,当延时的实际延时到达所述延时时长后,从所述第i个存储位置获取所述元数据,不需要再进行数据库的查询,也不需要对所有的存储位置遍历检索,直接在指定的存储位置获取元数据,降低了在数据量不断增大的情况下检索工作量的提升,减少了延时消息处理的时延。
在一些实施例中,所述在所述文件***中存储所述元数据,还包括:如果所述第i个存储位置已经有其他元数据,则按照链式存储结构将所述元数据和所述其他元数据存入所述第i个存储位置的不同存储节点。链式存储结构,又称为链接存储结构,链式存储结构中每个存储结点除了包含信息域之外,还至少包含一个指针域,用指针来体现存储结点之间的逻辑关系;在后续查询的时候,可以通过一个存储结点的指针访问到其它存储结点存储的元数据。
具体地,在本发明一些实施例中,第i个存储位置已经有第一元数据,所述第一元数据存储在所述第i个存储位置的第一存储结点,将第二元数据存储在所述第i个存储位置的第二存储结点,所述第一存储节点和所述第二存储节点之间可以通过指针进行访问。
步骤205,删除所述文件***中已消费的延时消息。
在一些实施例中,所述步骤205具体包括:
删除所述文件***中所述已消费的延时消息的消息数据,并删除所述已消费的延时消息的元数据。减少已消费的延时消息占用文件***的存储空间,也减少已消费的延时消息的元数据在环形数据结构中继续占用的存储位置,减少***资源浪费。
本发明实施例提供一种延时消息处理的装置,如图3所示,包括:接收模块31、存储模块32、转发模块33和删除模块34。
所述接收模块31,用于:利用消息队列缓存接收的延时消息;在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息。
所述存储模块32,用于将所述消息队列的所述延时消息转存到文件***。
所述转发模块33,用于从所述文件***中获取待消费的延时消息。
在一些实施例中,所述转发模块33,具体用于将所述延时消息存入所述消息队列中第一主题对应的第一存储位置。
所述存储模块32,具体用于将所述第一存储位置的延时消息移动到所述文件***中。
在一些实施例中,所述转发模块33,具体用于:
获取所述待消费的延时消息的第二主题,将所述文件***中的延时消息写入所述消息队列中所述第二主题对应的第二存储位置;
从所述消息队列中所述第二主题对应的第二存储位置获取待消费的延时消息。
在一些实施例中,所述转发模块33,还具体用于:将所述文件***中的待消费的延时消息发送给消费对象。
在一些实施例中,所述存储模块32,还具体用于:
将所述延时消息的消息数据存储在文件***中;
确定所述消息数据的元数据,其中,所述元数据包括:所述消息数据的消息标识ID、延时时长及所述消息数据存储在所述文件***中的偏移量;
在所述文件***中存储所述元数据。
在一些实施例中,所述存储模块32,还具体用于:根据所述延时时长除以N个预设单位时间的余数i,将所述元数据存入缓行数据结构的第i个存储位置,其中,N为所述环形数据结构的存储位置数量,所述环形数据结构的存储位置编号从0至N-1,0≤i≤N-1,且i和N为整数。
在一些实施例中,所述转发模块33,还具体用于:当延时的实际延时到达所述延时时长后,从所述第i个存储位置获取所述元数据。
在一些实施例中,所述存储模块32,还具体用于:如果所述第i个存储位置已经有其他元数据,则按照链式存储结构将所述元数据和所述其他元数据存入所述第i个存储位置的不同存储节点。
所述删除模块34,用于删除所述文件***中已消费的延时信息。
在一些实施例中,所述删除模块34,具体用于:删除所述文件***中所述已消费的延时消息的消息数据,并删除所述已消费的延时消息的元数据。
本发明一个具体的实施例,一种延时消息处理的方法,包括:
步骤401:用户端程序进行延时消息的封装,封装的内容包括延时消息的目标topic,所述目标topic为延时时长到达后延时消息转发的topic,还包括延时时长以及消息内容(指消息的实体内容),然后发送到消息队列中延时消息topic对应的存储位置。在一些实施例中,可以对所述延时消息topic进行命名,例如:命名为TOPIC-A;消息队列中该topic对应的存储位置接收所有的延时消息,并且不可被用户程序指定。所述延时消息格式如表1所示:
表1
在一些实施例中,用户端程序可以通过消息队列的开发工具包(softwaredevelopment kit,SDK)或者超文本传输协议(hypertext transfer protocol,http)接口调用消息发送的接口。
步骤402:消息队列中延时消息topic对应的存储位置确认收到延时消息之后直接应答用户端程序,此时用户端程序可继续处理其他业务。
由于现有技术在接收延时消息的发送请求后需要先将消息记录到数据库中,然后才答复用户端程序,本申请消息队列中延时消息topic对应的存储位置确认收到延时消息之后直接应答用户端程序,不需要将消息记录到数据库中,因此能够提高在高并发场景下的响应速度。
步骤403:延时消息成功接收之后,将所述延时消息从消息队列保存到文件***中,拆分出所述延时消息的元数据以及实体数据,其中,元数据信息包括所述延时消息的消息ID,延时时长以及实体数据在文件***的偏移量,所述偏移量用于从文件***中查询到对应的延时消息的实体数据;实体数据包括目标topic以及消息内容。
将元数据按照一定的规则存入环形数据结构。
在一些实施例中,所述环形数据结构为逻辑结构,所述逻辑结构包括:实际存储结构为长度3600的哈希映射(HashMap)。
环形数据结构划分为3600个存储位置,每个存储位置的数据结构为链式数据结构,所述环形数据结构的效果模拟如图4所示。其中,元数据存入环形数据结构的规则为:按照延时时长(本实施例中以秒为单位时间)除以3600的余数选择存入的存储位置,如果该存储位置已经有其他元数据,则按照链式存储结构存入该存储位置的不同存储节点;如果延时时长大于3600秒,需要在链表中加入相应的标记位(延时时长除以3600取整)。比如,延时消息大于n小时,则该字段的值为n。HashMap中键(key)为0-3599,值(value)为元数据数据结构,value包含如表2参数:
表2
例如:用户端程序发送的延时消息的代码如表3,
表3
将延时消息保存到文件***中,然后得到一个偏移量,比如为100000,可以通过该偏移量从文件***中查询到该延时消息的实体数据。
则该延时消息的元数据为表4,
表4
该元数据保存到HashMap中key为100的链表结构中。如果后续还有key为100的新延时消息,则新延时消息的元数据结构的next字段指向“0000001”。
步骤404:每隔1秒到指定的存储位置中获取延时消息的元数据。
在一些实施例中,为便于说明,以图4的环形数据结构的效果模拟为例,以3600秒为一个计时周期,当前处于第j秒,当1≤j≤3599时,在第j个存储位置获取延时消息的元数据,当j=3600时,在第0个存储位置获取延时消息的元数据,其中,j为3600以下的正整数。
步骤405:如果元数据中的延时小时数值为0,则根据元数据中的偏移量从文件***中获取对应的实体数据,并根据实体数据中的目标topic,将实体数据中的消息内容转发到消息队列中该目标topic对应的存储位置,用户端程序可以从监听的消息队列中目标topic对应的存储位置获取该消息内容。如果延时小时数值大于0,则将该延时小时数值减一处理。
步骤406:延时消息转发成功之后删除环形数据结构中存储的延时消息的元数据以及对应的文件***的实体数据。
上述实施例的延时消息处理时序如图5所示,用户端程序A生成延时消息并封装参数,将所述延时消息发送到消息队列中延时消息topic对应的存储位置,消息队列返回成功接收到所述延时消息的应答消息,确定所述延时消息的元数据,计算所述延时消息的元数据存入环形数据结构中的存储位置,将所述元数据存入环形数据结构中的存储位置,若存储位置已有其他元数据,则采用链式存储结构存储元数据;通过定时器计时,每隔预设的单位时间,查询指定卡槽中的元数据,元数据到期时,根据元数据中的偏移量从文件***中获取对应的实体数据,并根据实体数据中的目标topic,将实体数据中的消息内容转发到消息队列中该目标topic对应的存储位置,用户端程序B监听所述目标topic,监听到消息,获取该消息并消费;删除已消费的延时消息。
本发明一个具体的实施例,一种延时消息处理的装置,包括:消息接收模块、消息存储模块、轮询模块、消息转发模块以及消息删除模块。
所述消息接收模块,用于接收延时消息,指定消息队列中延时消息topic对应的存储位置,终端发送的延时消息均发送到延时消息topic对应的存储位置,延时消息接收成功之后立即应答发送所述延时消息的终端。
所述消息存储模块,用于将消息队列中存储的延时消息持久化,所述消息存储模块的实现方式可以为文件***,也可以为缓存***+文件***。
所述轮询模块,用于根据延时消息的延时时间计时;在一些实施例中,所述轮询模块包括环形数据结构。
所述消息转发模块,用于将延时消息topic对应的存储位置中存储的延时消息转发到目标topic对应的消息队列中的存储位置,供用户程序消费。
消息删除模块,用于将已经消费的延时消息删除。
本申请提案与现有的方案相比较,规避了数据库的使用,有效的解决了高并发环境下数据库的压力,消息的查询以及***效率大大提高,用户端程序只需按照指定的格式封装延迟消息报文即可,也减轻了用户端程序的复杂度,一定程度上提高业务代码的质量。
需要说明的是:以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种延时消息处理的方法,其特征在于,所述方法包括:
利用消息队列缓存接收的延时消息;
在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息;
将所述消息队列的所述延时消息转存到文件***;
从所述文件***中获取待消费的延时消息;
所述利用消息队列缓存接收的延时消息,包括:将所述延时消息存入所述消息队列中第一主题对应的第一存储位置;所述将所述消息队列的所述延时消息转存到文件***,包括:将所述第一存储位置的延时消息移动到所述文件***中;
所述从所述文件***中获取待消费的延时消息,包括:获取所述待消费的延时消息的第二主题,将所述文件***中的延时消息写入所述消息队列中所述第二主题对应的第二存储位置;从所述消息队列中所述第二主题对应的第二存储位置获取待消费的延时消息;或者,将所述文件***中的待消费的延时消息发送给消费对象;
所述将所述消息队列的所述延时消息转存到文件***,包括:
将所述延时消息的消息数据存储在所述文件***中,确定所述消息数据的元数据,其中,所述元数据包括:所述消息数据的消息标识ID、延时时长及所述消息数据存储在所述文件***中的偏移量;
在所述文件***中存储所述元数据;
所述在所述文件***中存储所述元数据,包括:根据所述延时时长除以N个预设单位时间的余数i,将所述元数据存入环形数据结构的第i个存储位置,其中,N为所述环形数据结构的存储位置数量,所述环形数据结构的存储位置编号从0至N-1,0≤i≤N-1,且i和N为整数;当延时的实际延时到达所述延时时长后,从所述第i个存储位置获取所述元数据;如果所述第i个存储位置已经有其他元数据,则按照链式存储结构将所述元数据和所述其他元数据存入所述第i个存储位置的不同存储节点。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
删除所述文件***中已消费的延时消息。
3.一种延时消息处理的装置,其特征在于,所述装置包括:
接收模块,用于利用消息队列缓存接收的延时消息;
所述接收模块,还用于在所述消息队列成功写入所述延时消息后,向发送所述延时消息的终端发送应答消息;
存储模块,用于将所述消息队列的所述延时消息转存到文件***;
所述存储模块,具体用于将第一存储位置的延时消息移动到所述文件***中;
所述存储模块,还具体用于:将所述延时消息的消息数据存储在所述文件***中;确定所述消息数据的元数据,其中,所述元数据包括:所述消息数据的消息标识ID、延时时长及所述消息数据存储在所述文件***中的偏移量;在所述文件***中存储所述元数据;
所述存储模块,还具体用于:根据所述延时时长除以N个预设单位时间的余数i,将所述元数据存入环形数据结构的第i个存储位置,其中,N为所述环形数据结构的存储位置数量,所述环形数据结构的存储位置编号从0至N-1,0≤i≤N-1,且i和N为整数;当延时的实际延时到达所述延时时长后,从所述第i个存储位置获取所述元数据;如果所述第i个存储位置已经有其他元数据,则按照链式存储结构将所述元数据和所述其他元数据存入所述第i个存储位置的不同存储节点;
转发模块,用于从所述文件***中获取待消费的延时消息;所述转发模块,具体用于:将所述延时消息存入所述消息队列中第一主题对应的第一存储位置;或者,所述转发模块,具体用于:获取所述待消费的延时消息的第二主题,将所述文件***中的延时消息写入所述消息队列中所述第二主题对应的第二存储位置;从所述消息队列中所述第二主题对应的第二存储位置获取待消费的延时消息;或者,所述转发模块,具体用于:将所述文件***中的待消费的延时消息发送给消费对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910591002.5A CN112181671B (zh) | 2019-07-02 | 2019-07-02 | 一种延时消息处理的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910591002.5A CN112181671B (zh) | 2019-07-02 | 2019-07-02 | 一种延时消息处理的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112181671A CN112181671A (zh) | 2021-01-05 |
CN112181671B true CN112181671B (zh) | 2022-12-16 |
Family
ID=73914304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910591002.5A Active CN112181671B (zh) | 2019-07-02 | 2019-07-02 | 一种延时消息处理的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181671B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114064741B (zh) * | 2022-01-17 | 2022-05-24 | 天津所托瑞安汽车科技有限公司 | 一种前置数据获取方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105791942A (zh) * | 2014-12-23 | 2016-07-20 | 深圳Tcl数字技术有限公司 | 智能电视的频道信息显示方法及装置 |
CN105843937A (zh) * | 2016-03-31 | 2016-08-10 | 北京奇虎科技有限公司 | 数据处理方法和装置 |
CN107391269A (zh) * | 2016-03-28 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种用于通过持久化队列处理消息的方法与设备 |
CN107391271A (zh) * | 2017-05-17 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种基于消息队列***的延时任务触发方法和装置 |
-
2019
- 2019-07-02 CN CN201910591002.5A patent/CN112181671B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105791942A (zh) * | 2014-12-23 | 2016-07-20 | 深圳Tcl数字技术有限公司 | 智能电视的频道信息显示方法及装置 |
CN107391269A (zh) * | 2016-03-28 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种用于通过持久化队列处理消息的方法与设备 |
CN105843937A (zh) * | 2016-03-31 | 2016-08-10 | 北京奇虎科技有限公司 | 数据处理方法和装置 |
CN107391271A (zh) * | 2017-05-17 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 一种基于消息队列***的延时任务触发方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112181671A (zh) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391271B (zh) | 一种基于消息队列***的延时任务触发方法和装置 | |
US10204114B2 (en) | Replicating data across data centers | |
CN111177161B (zh) | 数据处理方法、装置、计算设备和存储介质 | |
CN107613529B (zh) | 消息处理方法以及基站 | |
CN111221469B (zh) | 同步缓存数据的方法、装置和*** | |
CN101986271B (zh) | 调度tcam查询和刷新消息的方法和装置 | |
CN112367149B (zh) | 消息获取方法、装置、设备及存储介质 | |
CN102780603B (zh) | 网站流量控制方法及装置 | |
CN102981911A (zh) | 一种分布式消息处理***及其中的设备和方法 | |
CN111159233B (zh) | 分布式缓存方法、***、计算机设备以及存储介质 | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN113392132A (zh) | Iot场景的分布式缓存方法及*** | |
CN112698959A (zh) | 一种多核通信方法和装置 | |
CN112181671B (zh) | 一种延时消息处理的方法及装置 | |
CN113360577A (zh) | 一种mpp数据库数据处理方法、装置、设备及存储介质 | |
CN113312370B (zh) | 信息获取方法、装置、电子设备及存储介质 | |
CN112866339B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
CN107563942B (zh) | 一种物流数据批量处理方法、物流处理***以及处理装置 | |
CN107896246A (zh) | 基于xbrl的消息传播*** | |
CN110955669B (zh) | 基于事件与内存数据库的前后端数据一致性方法及*** | |
CN106909636B (zh) | 一种基于中间件的数据处理方法及*** | |
CN112818166A (zh) | 一种视频信息查询方法、装置、电子设备和存储介质 | |
CN112748855A (zh) | 处理高并发数据请求的方法和装置 | |
CN112286973B (zh) | 数据消息的存储方法、装置、计算机设备及存储介质 | |
CN113094391B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |