CN112702259B - 延迟消息推送方法、装置及消息中间件 - Google Patents
延迟消息推送方法、装置及消息中间件 Download PDFInfo
- Publication number
- CN112702259B CN112702259B CN202011535977.5A CN202011535977A CN112702259B CN 112702259 B CN112702259 B CN 112702259B CN 202011535977 A CN202011535977 A CN 202011535977A CN 112702259 B CN112702259 B CN 112702259B
- Authority
- CN
- China
- Prior art keywords
- message
- delay
- queue
- time
- ready
- 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
- 238000000034 method Methods 0.000 title claims abstract description 75
- 230000003111 delayed effect Effects 0.000 claims abstract description 92
- 238000012545 processing Methods 0.000 claims abstract description 24
- 238000012423 maintenance Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 11
- 238000012544 monitoring process Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/214—Monitoring or handling of messages using selective forwarding
-
- 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/55—Push-based network 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
-
- 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/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/62—Establishing a time schedule for servicing the requests
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种延迟消息推送方法、装置及消息中间件。该延迟消息推送方法包括:获取业务终端的待推送延迟消息和消息ID;基于延迟推送时间和当前时间确定待推送延迟消息的推送时间;结合消息ID,将推送时间存储于延迟队列及待推送延迟消息的消息内容存储于消息内容池;定时扫描延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到就绪队列中存在消息ID时,由消息内容池中读取对应消息ID的消息内容执行推送。该延迟消息推送方法保证延迟消息能够得到及时处理,提高消息处理的实时性。
Description
技术领域
本发明涉及信息处理技术领域,尤其涉及一种延迟消息推送方法、装置及消息中间件。
背景技术
在实际应用中,业务终端之间的消息推送可以是即时推送,也可以是延迟推送。即时推送是指业务终端A给业务终端B发送一条消息,业务终端B会收到一个实时的消息提醒。延迟推送是指在即时推送的基础上,业务终端A为了达到再次提醒的目的,当业务终端B在一定时间内仍然没有读取这条消息时,再次推送一条提醒消息。
现有的业务终端均采用各自独立实现和维护的一套相似的延迟消息推送逻辑,在进行延迟消息推送时完全依赖于数据库,将所有延迟消息存入数据库,生成对应的记录,并为每条记录设置一个推送时间,业务终端定时轮询数据库,当推送时间到达或超过当前时间时,抢先处理该推送时间对应的记录。
采用现有的方式,针对每个业务终端均需要独立进行消息推送维护,导致开发和维护成本的浪费;另外,将所有的延迟消息存入数据库,并进行定时轮询数据库中的所有延迟消息以获得推送时间。当存在很多延迟消息要推送时,扫描数据将花费很长时间,会影响延迟消息推送的实时性。
发明内容
有鉴于此,本发明实施例提供一种延迟消息推送方法、装置及消息中间件,以实现减少开发成本和维护成本的浪费和提高延迟消息推送的实时性的目的。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开了一种延迟消息推送方法,应用于消息中间件,所述方法包括:并行执行的处理流程和轮询流程;
所述处理流程包括:
获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间;
基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;
基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;
定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;
所述轮询流程包括:
实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送。
可选的,所述基于所述延迟推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池,包括:
比较所述推送时间与所述延迟队列中已存储的推送时间的大小,确定所述推送时间在所述延迟队列中的位置,所述延迟队列基于Redis的有序集合构建,所述推送时间由小至大依次从所述延迟队列的头部开始排列;
将所述推送时间结合所述消息ID存储于所述延迟队列确定的位置;
将所述待推送延迟消息的消息内容和所述消息ID以Redis的键值对的形式存储于消息内容池,所述Redis的键值对中的键为所述消息ID,值为所述消息内容。
可选的,所述定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列,包括:
定时轮询存储于所述延迟队列头部的推送时间;
若所述推送时间到达或超过当前时间,基于所述推送时间对应的消息ID中的就绪队列ID确定就绪队列;
将所述消息ID迁移至所述就绪队列,所述就绪队列基于Redis的列表构建。
可选的,所述实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送,包括:
若所述业务终端对应一个就绪队列,实时扫描所述就绪队列,当所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;
若所述业务终端对应多个就绪队列,实时轮询所述多个就绪队列,若所述多个就绪队列中任意就绪队列存在消息ID,基于预先配置读取一个或多个消息ID;
基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
可选的,所述方法还包括:
在推送成功之后,删除所述就绪队列中的所述消息ID和所述消息内容池中所述消息ID对应的消息内容。
本发明实施例第二方面公开了一种延迟消息推送装置,应用于消息中间件,所述装置包括:
获取模块,用于获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间;
处理模块,用于基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;
轮询模块,用于定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,执行推送模块;
推送模块,用于基于所述消息ID从所述消息内容池中读取对应的消息内容,执行推送。
可选的,所述基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池的处理模块,具体用于:
比较所述推送时间与所述延迟队列中已存储的推送时间的大小,确定所述推送时间在所述延迟队列中的位置,所述延迟队列基于Redis的有序集合构建,所述推送时间由小至大依次从所述延迟队列的头部开始排列;将所述推送时间结合所述消息ID存储于所述延迟队列确定的位置;将所述待推送延迟消息的消息内容以Redis的键值对的形式存储于消息内容池,所述Redis的键值对中键为所述消息ID,值为所述消息内容。
可选的,所述定时轮询所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列的轮询模块,具体用于:
定时轮询存储于所述延迟队列头部的推送时间;若所述推送时间到达或超过当前时间,基于所述推送时间对应的消息ID中的就绪队列ID确定就绪队列;将所述消息ID迁移至所述就绪队列,所述就绪队列基于Redis的列表构建;
所述实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送的轮询模块,具体用于:
若所述业务终端对应一个就绪队列,实时扫描所述就绪队列,当所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;若所述业务终端对应多个就绪队列,实时轮询所述多个就绪队列,若所述多个就绪队列中任意就绪队列存在消息ID,基于预先配置读取一个或多个消息ID;基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
可选的,所述处理模块,还用于:
在推送成功之后,删除所述就绪队列中的所述消息ID和所述消息内容池中所述消息ID对应的消息内容。
本发明实施例第三方面公开了一种消息中间件,所述消息中间件包括:服务器和客户端;
所述客户端,用于连接所述业务终端和所述服务器,以及在所述服务器轮询到所述就绪队列中存在消息ID时,基于所述消息ID从所述消息内容池中读取对应的消息内容执行推送;
所述服务器,用于获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间,基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,执行所述客户端。
基于上述本发明实施例提供的一种延迟消息推送方法,应用于消息中间件,所述方法包括:获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间;基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送。在本方案中,业务终端各自接入消息中间件,并将延迟消息发送至消息中间件中自身对应的延迟队列,在基于消息中间件进行延迟消息的推送时,只需要扫描就绪队列中的消息,无需扫描全部消息数据,不仅减少了每个业务终端均各自独立进行消息推送维护和开发的成本,同时,还提高了延迟消息推送的实时性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的延迟消息推送系统的架构示意图;
图2为本发明实施例提供的一种延迟消息推送方法的流程图;
图3为本发明实施例提供的另一种延迟消息推送方法的流程图;
图4为本发明实施例提供的再一种延迟消息推送方法的流程图;
图5为本发明实施例提供的又一种延迟消息推送方法的流程图;
图6为本发明实施例提供的一种延迟消息推送装置的结构示意图;
图7为本发明实施例提供的一种消息中间件的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,当有很多延迟消息要推送时,扫描数据将花费很长时间,影响了延迟消息推送的实时性。
因此,本发明实施例提供一种延迟消息推送方法、装置及消息中间件,在本方案中,各个业务终端通过接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
参见图1,为本发明实施例提供的延迟消息推送系统的架构示意图,该延迟消息推送系统包括:业务终端11、业务终端12和消息中间件13。
消息中间件13上设置有客户端131和服务器132。
中间件的客户端131利用消息中间件提供的功能/接口封装而成,业务终端11和业务终端12通过代码引入的方式引入该客户端131。
业务终端11和业务终端12均通过引入的同一个消息中间件的客户端131与消息中间件13进行通信交互。
消息中间件13为业务终端配置在消息传输过程中使用到的就绪队列和延迟队列,以及用于存储消息的消息内容池。
其中,延迟队列是基于Redis的有序集合构建的,是在消息中间件的服务器132上创建的专门用于存储延迟消息的队列。Redis的有序集合中的元素是按顺序进行排列的。一般情况下,Redis的有序集合中的元素按照以下规则排序:
如果A和B是两个分数不同的元素,则如果A.score是>B.score,则A>B。如果A和B的分数完全相同,则A字符串在字典上大于B字符串,则A>B。A和B字符串不能相等,因为有序集合中的元素是唯一的。
在消息中间件上对其存储的待推送延迟消息进行处理时,一般按照先进先出的原则。
就绪队列是基于Redis的列表构建的,Redis的列表是按插入顺序排序的字符串元素的集合。通常情况下为链表的形式。
需要说明的是,Redis是完全开源免费的遵守开源许可协议的高性能的键值(key-value)数据库。
在具体分配时,消息中间件针对所有业务终端仅分配一个延迟队列,也就是说,与其建立通信连接的所有业务终端的延迟消息均存储在一个延迟队列中。但是,对于不同的业务终端会配置不同的就绪队列,一个业务终端可以分配多个就绪队列,每一个就绪队列对应的一个就绪队列ID。
消息内容池是以Redis的键值对方式存储消息。其中,Redis的键值对中的键是消息ID,值是待推送消息的消息内容。
基于图1公开的延迟消息推送系统实现业务终端11向业务终端12进行消息推送过程为:
业务终端11通过消息中间件的客户端131向消息中间件的服务器132发送一个待推送消息和消息ID。该消息ID中包括业务终端12的业务终端ID、就绪队列ID、推送时间和当前时间戳。
消息ID是业务终端11在向业务终端12发送消息时生成的,当前时间戳指示该消息的产生时间,推送时间为该消息的推送时间。若业务终端11向业务终端12发送即时消息,则设置推送时间为0;若业务终端11向业务终端12发送延迟消息,则该推送时间即为延迟推送时间,具体设置为需要延迟的时间,例如需要延迟5分钟,则设置该延迟推送时间为5分钟。通常情况下,该延迟推送时间的单位以毫秒计。
服务器132基于推送时间确定待推送消息的类型。具体的确定方式为,如果推送时间为0,则确定该待推送消息为即时消息。服务器132按照消息ID中的就绪队列ID将该即时消息的消息ID迁移至对应的就绪队列,将该即时消息和消息ID采用Redis的键值对的方式存储于消息内容池中,其中,Redis的键值对中的键是消息ID,值是该即时消息的消息内容。
如果该推送时间非0,则确定该待推送消息为延迟消息,该消息ID中的推送时间即为延迟推送时间。服务器132将该延迟消息和消息ID采用Redis的键值对的方式存储于消息内容池中,其中,Redis的键值对中的键是消息ID,值是该延迟消息的消息内容。将该延迟消息的消息ID存储于延迟队列中。
需要说明的是,延迟队列由头部开始向下按照推送时间(实际推送的时间)的大小,由小至大顺序排列消息ID。在将延迟消息的消息ID存储于延迟队列时,按照该延迟推送时间和当前时间的和值的大小插入延迟队列。其中,当前时间为当前系统的实际时间。
服务器132实时轮询扫描延迟队列的头部,将当前时间和头部消息ID对应的推送时间进行比对,如果推送时间到达或超过当前时间,则将该消息ID由延迟队列迁移至就绪队列ID对应的就绪队列。
客户端131读取业务终端11对应的就绪队列中的消息ID,并基于该消息ID从消息内容池中获取对应的消息推送给业务终端12。
需要说明的是,客户端131通常情况下,每次只读取业务终端对应的一个就绪队列中的消息ID,若业务终端存在多个就绪队列,或者当前一个或多个就绪队列中存在多个消息ID时,客户端131也可以一次读取多个消息ID。
在消息推送成功之后,消息中间件的服务器132删除就绪队列中的消息ID和消息内容池中该消息ID对应的消息内容。
在本发明实施例中,各个业务终端通过接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
基于上述示出的延迟消息推送系统,参见图2,为本发明实施例提供的一种延迟消息推送方法的流程图,该延迟消息推送方法应用于消息中间件,消息中间件可以为图1示出的消息中间件。所述延迟消息推送方法包括并行的处理流程和轮询流程。所述处理流程包括以下步骤:
步骤S201:获取业务终端的待推送延迟消息和消息ID。
在步骤S201中,待推送延迟消息是业务终端基于自身业务需求形成并向特定用户推送的消息。
在步骤S201中,所述消息ID是业务终端发送待延迟推送消息时产生的。该消息ID至少包括业务终端ID、就绪队列ID和延迟推送时间。
其中,该延迟推送时间的单位是毫秒,该延迟推送时间是一个表示时间长短的数字,比如延迟1小时推送,就是延迟3600000毫秒推送。
需要说明的是,该消息ID中还可以包括当前时间戳,该当前时间戳用于指示该待延迟推送消息的产生时间。一旦后续推送消息出现问题时,可通过消息ID中的当前时间戳对推送的消息进行排查。
在具体实现步骤S201的过程中,通过消息中间件的客户端连接业务终端和消息中间件的服务器,消息中间件的服务器获取由业务终端基于消息中间件的客户端发送来的待推送延迟消息和消息ID。
需要说明的是,所述消息中间件的客户端可以为图1所示出的消息中间件上的客户端,所述消息中间件的服务器可以为图1所示出的消息中间件上的服务器。
步骤S202:基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间。
在步骤S202中,当前时间为当前系统的实际时间。
在具体实现步骤S202的过程中,消息中间件的服务器将当前时间和延迟推送时间进行加法计算,得到该延迟推送时间的具体推送时间。
例如:一条待推送延迟消息的延迟推送时间是1200000毫秒,当前时间为10:00,通过执行步骤S202确定当前时间与待推送延迟消息的延迟推送时间的和值,即10:00+1200000(毫秒)=10:20,得到具体的推送时间为10:20。
步骤S203:基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池。
在步骤S203中,延迟队列中的消息ID的存储方式为:按照消息ID对应的推送时间的大小,由小至大依次从延迟队列的头部开始排列。
在具体实现步骤S203的过程中,通过比较所述推送时间与所述延迟队列中已存储的推送时间的大小,将所述消息ID插入所述延迟队列中。
将所述待推送延迟消息的消息内容和所述消息ID采用Redis的键值对的方式存储于消息内容池中,其中,Redis的键值对中的键是消息ID,值是该延迟消息的消息内容。
步骤S204:定时扫描所述延迟队列中的推送时间,并比较该推送时间是否到达或超过当前时间,若达到或超过,则执行步骤S205,若未超过,则继续执行步骤S204。
在具体实现步骤S204的过程中,采用监听线程定时轮询的方式,扫描延迟队列中存储的消息ID对应的推送时间。
优选的,可以仅扫描延迟队列头部存储的消息ID对应的推送时间。
步骤S205:将到达或超过该推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列。
在步骤S205中,就绪队列基于Redis的列表构建。
在具体实现步骤S205的过程中,基于消息ID中携带的就绪队列ID确定要迁移的就绪队列,将该推送时间对应的消息ID确定的就绪队列中。
所述轮询流程包括以下步骤:
步骤S206:实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送。
在步骤S206中,消息内容池与上述图1对应的说明部分所涉及到的消息内容池的功能一致。
在具体实现步骤S206的过程中,采用监听线程轮询监听消息ID中携带的业务终端ID所对应的就绪队列,若所述就绪队列中存在消息ID时,由消息中间件的客户端读取所述消息内容池中所述消息ID对应的消息内容,并进行推送。
在本发明实施例中,在延迟消息推送成功之后,由消息中间件的服务器删除所述就绪队列中的所述消息ID,以及所述消息内容池中所述消息ID对应的消息内容。
基于本发明实施例公开的延迟消息推送方法,通过使各个业务终端接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
基于上述本发明实施例示出的延迟消息推送系统,参见图3,为本发明实施例提供的另一种延迟消息推送方法的流程图,该延迟消息推送方法应用于消息中间件,消息中间件可以为图1示出的消息中间件。具体包括并行的处理流程和轮询流程。所述处理流程包括以下步骤:
步骤S301:获取业务终端的待推送延迟消息和消息ID。
步骤S302:基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间。
上述步骤S301至步骤S302的执行原理和过程与图2中公开的步骤S201至步骤S202的执行原理和过程相同,可参见,这里不再赘述。
步骤S303:比较所述推送时间与所述延迟队列中已存储的推送时间的大小,确定所述推送时间在所述延迟队列中的位置。
步骤S304:将所述推送时间结合所述消息ID存储于所述延迟队列确定的位置。
在具体实现步骤S303和步骤S304的过程中,可选的,延迟队列以跳跃表的方式存储推送时间,因此由延迟队列的头部开始,也就是跳跃表的表头开始,将基于步骤S302确定的推送时间与延迟队列中存储的推送时间进行比较,直至确定大于自己的推送时间的位置,将基于步骤S302确定的推送时间结合对应的消息ID插入到确定位置的推送时间的上方。
其中,跳跃表是一种随机化的数据,跳跃表以有序的方式在层次化的链表中保存元素。跳跃表主要由以下部分构成:
表头(head):负责维护跳跃表的节点指针。
跳跃表节点:保存着元素值,以及多个层。
层:保存着指向其他元素的指针,高层的指针越过的元素数量大于等于低层的指针,为了提高查找的效率,程序总是从高层先开始访问,然后随着元素值范围的缩小,慢慢降低层次。
表尾:全部由NULL组成,表示跳跃表的末尾。
例如,基于步骤S302确定的推送时间为10:20,延迟队列以跳跃表的方式在跳跃表节点中由小至大存储有消息ID对应推送时间具体为:10:10、10:12、10:15、10:25、10:30……。基于跳跃表节点和层进行推送时间的比较,当比较至10:25时,确定其大于自身,此时新增一个跳跃表节点插入至存储10:25对应的消息ID的跳跃表节点之前的位置,将该10:20的推送时间对应的消息ID结合该推送时间存储于该新增跳跃表节点,最终得到延迟队列以跳跃表的方式在跳跃表节点中由小至大存储有消息ID对应推送时间具体为:10:10、10:12、10:15、10:20、10:25、10:30……。
需要说明的是,若比较的过程中,确定延迟队列中存在10:20的推送时间,此时,可以将新增跳跃表节点插入至已存在于延迟队列中用于存储10:20对应的消息ID的跳跃表节点之前或之后。
步骤S305:将所述待推送延迟消息的消息内容和消息ID以Redis的键值对的形式存储于消息内容池。
在具体实现步骤S305的过程中,将所述待推送延迟消息的消息内容作为Redis的键值对的值,将消息ID作为Redis的键值对的键,以Redis的键值对的形式将待推送延迟消息的消息内容和消息ID存储于消息内容池中。
步骤S306:定时扫描所述延迟队列中的推送时间,并比较该推送时间是否到达或超过当前时间,若到达或超过,则执行步骤S307,若未超过,则继续执行步骤S306。
步骤S307:将该推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列。
所述轮询流程包括以下步骤:
步骤S308:实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送。
上述步骤S306至步骤S308的执行原理和过程与图2中公开的步骤S204至步骤S206的执行原理和过程相同,可参见,这里不再赘述。
基于本发明实施例公开的延迟消息推送方法,通过使各个业务终端接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
基于上述本发明实施例示出的延迟消息推送系统,参见图4,为本发明实施例提供的另外一种延迟消息推送方法的流程图,该延迟消息推送方法应用于消息中间件,消息中间件可以为图1示出的消息中间件。具体包括并行的处理流程和轮询流程。所述处理流程包括以下步骤:
步骤S401:获取业务终端的待推送延迟消息和消息ID。
步骤S402:基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间。
步骤S403:基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池。
上述步骤S401至步骤S403的执行原理和过程与图2中公开的步骤S201至步骤S203的执行原理和过程相同,可参见,这里不再赘述。
步骤S404:定时轮询存储于所述延迟队列头部的推送时间,并比较该推送时间是否到达或超过当前时间,若到达或超过,则执行步骤S405,若未超过,则继续执行步骤S404。
在具体实现步骤S404的过程中,只扫描延迟队列的头部存储的消息ID对应的推送时间,将扫描到的推送时间与系统的当前时间进行比较,若该推送时间到达或超过当前时间,则说明到达发送该消息ID对应的延迟消息的时间。若该推送时间未超过当前时间,则说明还未到达发送该消息ID对应的延迟消息的时间。
例如,延迟队列的头部存储的消息ID对应的推送时间为10:30,若定时轮询扫描到头部存储的消息ID的时间,即当前时间为10:32,将10:32和10:30比较,确定推送时间超过当前时间,则确定到达发送该消息ID对应的延迟消息的时间。
若定时轮询扫描到头部存储的消息ID的时间,即当前时间为10:25,将10:45和10:30比较,确定推送时间未超过当前时间,则确定当前未到达发送该消息ID对应的延迟消息的时间,继续执行一下次扫描。
步骤S405:基于所述推送时间对应的消息ID中的就绪队列ID确定就绪队列。
步骤S406:将所述消息ID迁移至所述就绪队列。
所述轮询流程包括以下步骤:
步骤S407:实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送。
上述步骤S407的执行原理和过程与图2中公开的步骤S206的执行原理和过程相同,可参见,这里不再赘述。
基于本发明实施例公开的延迟消息推送方法,通过使各个业务终端接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
基于上述本发明实施例示出的延迟消息推送系统,参见图5,为本发明实施例提供的又一种延迟消息推送方法的流程图,该延迟消息推送方法应用于消息中间件,消息中间件可以为图1示出的消息中间件。具体包括并行的处理流程和轮询流程。所述处理流程包括以下步骤:
步骤S501:获取业务终端的待推送延迟消息和消息ID。
步骤S502:基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间。
步骤S503:基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池。
步骤S504:定时扫描所述延迟队列中的推送时间,并比较该推送时间是否到达或超过当前时间,若达到或超过,则执行步骤S505,若未超过,则继续执行步骤S504。
步骤S505:将该推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列。
上述步骤S501至步骤S505的执行原理和过程与图2中公开的步骤S201至步骤S205的执行原理和过程相同,可参见,这里不再赘述。
基于业务终端对应的就绪队列的个数不同,采用不同的方式进行轮询扫描就绪队列。
若业务终端对应一个就绪队列,则执行轮询流程中的步骤S506和步骤S507。
若业务终端对应多个就绪队列,则执行轮询流程中的步骤S508和步骤S510。
步骤S506:采用监听线程的方式,实时扫描所述就绪队列,判断所述就绪队列中是否存在消息ID,若所述就绪队列中存在消息ID,则执行步骤S507;若所述就绪队列中不存在消息ID,继续执行步骤S506。
在步骤S506中,监听线程是用于监听队列中是否有特定事件发生的线程。本实施例中的队列具体是消息中间件,尤其是指消息中间件上创建的就绪队列。相应地,特定事件可以是指有待推送延迟消息进入队列这一事件。
在具体实现步骤S506的过程中,采用监听线程轮询监听就绪队列,具体是指在监听线程启动后,该监听线程循环地去询问就绪队列中是否有新的待推送延迟消息加入。若所述就绪队列中加入新的消息ID,说明所述就绪队列存在需要进行推送的待推送延迟消息,则执行步骤S507;若所述就绪队列中不存在消息ID,说明所述就绪队列不存在需要进行推送的待推送延迟消息,则继续执行步骤S506。
步骤S507:由所述消息内容池中读取对应所述消息ID的消息内容执行推送。
优选的,若当前扫描的就绪队列中存在多个新加入的消息ID,则由所述消息内容池中读取多个消息ID各自对应的消息内容执行推送。
步骤S508:采用监听线程的方式,实时轮询所述多个就绪队列,依次判断多个就绪队列中是否存在消息ID,若所述多个就绪队列中任意就绪队列存在消息ID,则执行步骤S509;若所述就绪队列中不存在消息ID,则继续执行步骤S508。
在具体实现步骤S508的过程中,采用监听线程依次轮询监听多个就绪队列,具体是指在监听线程启动后,该监听线程依次循环地去询问每个就绪队列中是否有新的待推送延迟消息加入。若多个就绪队列中任意就绪队列存在新加入的消息ID,说明该就绪队列存在需要进行推送的待推送延迟消息,则执行步骤S509;若所述多个就绪队列中均不存在新加入的消息ID,说明当前不存在需要进行推送的待推送延迟消息,则继续执行步骤S508。
步骤S509:基于预先配置读取一个或多个消息ID。
步骤S510:基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
基于本发明实施例公开的延迟消息推送方法,通过使各个业务终端接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
基于上述本发明实施例提供的延迟消息推送方法,本发明实施例还提供了对应的延迟消息推送装置。
参见图6,为本发明实施例提供的一种延迟消息推送装置的结构示意图,该延迟消息推送装置应用于消息中间件,消息中间件可以为图1示出的消息中间件。所述延迟消息推送装置包括:获取模块60、处理模块61、轮询模块62和推送模块63。
获取模块60,用于获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间。
处理模块61,用于基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容存储于消息内容池。
具体的,所述基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容存储于消息内容池的处理模块,具体用于:
比较所述推送时间与所述延迟队列中已存储的推送时间的大小,确定所述推送时间在所述延迟队列中的位置,所述延迟队列基于Redis的有序集合构建,所述推送时间由小至大依次从所述延迟队列的头部开始排列;将所述推送时间结合所述消息ID存储于所述延迟队列确定的位置;将所述待推送延迟消息的消息内容以Redis的键值对的形式存储于消息内容池,所述Redis的键值对中键为所述消息ID,值为所述消息内容。
在本发明实施例中,所述处理模块,还用于:在推送成功之后,删除所述就绪队列中的所述消息ID和所述消息内容池中所述消息ID对应的消息内容。
轮询模块62,用于定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,执行推送模块。
所述轮询模块62在定时扫描所述延迟队列的过程中,具体用于定时轮询存储于所述延迟队列头部的推送时间;若所述推送时间到达或超过当前时间,基于所述推送时间对应的消息ID中的就绪队列ID确定就绪队列;将所述消息ID迁移至所述就绪队列,所述就绪队列基于Redis的列表构建。
所述轮询模块62在实时轮询就绪队列的过程中,具体用于若所述业务终端对应一个就绪队列,实时扫描所述就绪队列,当所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;若所述业务终端对应多个就绪队列,实时轮询所述多个就绪队列,若所述多个就绪队列中任意就绪队列存在消息ID,基于预先配置读取一个或多个消息ID;基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
推送模块63,用于基于所述消息ID从所述消息内容池中读取对应的消息内容,执行推送。
需要说明的是,上述本发明实施例公开的延迟消息推送装置中的各个模块具体的原理和执行过程,与上述图2至图5本发明实施例公开的延迟消息推送方法中对应的部分的原理和执行过程相同,可参见上述本发明实施例公开的延迟消息推送方法中相应的部分,这里不再进行赘述。
在本发明实施例中,通过轮询模块定时扫描所述延时队列中的推送时间和实时轮询就绪队列,对延迟队列中缓存的待推送消息进行及时推送处理,可保证待推送消息能够得到及时处理,提高消息处理的实时性。
基于本发明实施例公开的延迟消息推送方法,通过使各个业务终端接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
参见图7,为本实施例提供的一种消息中间件的结构示意图,所述消息中间件70包括:服务器71和客户端72。
所述客户端72,用于连接所述业务终端和所述服务器71,以及在所述服务器轮询到所述就绪队列中存在消息ID时,基于所述消息ID从所述消息内容池中读取对应的消息内容执行推送。
所述服务器71,用于获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间,基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;结合所述消息ID,将所述推送时间存储于延迟队列,以及所述待推送延迟消息的消息内容存储于消息内容池;定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,执行所述客户端。
所述服务器71,还用于在推送成功之后,删除所述就绪队列中的所述消息ID和所述消息内容池中所述消息ID对应的消息内容。
需要说明的是,业务终端在使用消息中间件提供的客户端的时候,需要进行参数配置,以此来确定业务终端对应的就绪队列,在所述服务器轮询到所述就绪队列中存在消息ID时,客户端推送基于所述消息ID从所述消息内容池中读取对应的消息内容。
基于本发明实施例公开的延迟消息推送方法,通过使各个业务终端接入消息中间件,使用消息中间件上的功能实现对延迟消息进行推送,减少了每个业务终端独立进行消息推送维护和开发的成本;在推送延迟消息的过程中,在消息中间件接收到业务终端发送的延迟消息后,将该延迟消息分配至其对应的延迟队列中,在基于消息中间件进行延迟消息推送时,只需要扫描就绪队列中的消息,而无需扫描全部消息数据,从而提高了延迟消息推送的实时性。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (9)
1.一种延迟消息推送方法,其特征在于,应用于消息中间件,所述方法包括:并行执行的处理流程和轮询流程;
所述处理流程包括:
获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间;
基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;
基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;
定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;每个就绪队列与一个业务终端相对应,对于不同的业务终端会配置不同的就绪队列;一个业务终端至少分配一个就绪队列;
所述轮询流程包括:
实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;
所述实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送,包括:
若所述业务终端对应一个就绪队列,实时扫描所述就绪队列,当所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;
若所述业务终端对应多个就绪队列,实时轮询所述多个就绪队列,若所述多个就绪队列中任意就绪队列存在消息ID,基于预先配置读取一个或多个消息ID;
基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
2.根据权利要求1所述的方法,其特征在于,所述基于所述延迟推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池,包括:
比较所述推送时间与所述延迟队列中已存储的推送时间的大小,确定所述推送时间在所述延迟队列中的位置,所述延迟队列基于Redis的有序集合构建,所述推送时间由小至大依次从所述延迟队列的头部开始排列;
将所述推送时间结合所述消息ID存储于所述延迟队列确定的位置;
将所述待推送延迟消息的消息内容和所述消息ID以Redis的键值对的形式存储于消息内容池,所述Redis的键值对中的键为所述消息ID,值为所述消息内容。
3.根据权利要求1所述的方法,其特征在于,所述定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列,包括:
定时轮询存储于所述延迟队列头部的推送时间;
若所述推送时间到达或超过当前时间,基于所述推送时间对应的消息ID中的就绪队列ID确定就绪队列;
将所述消息ID迁移至所述就绪队列,所述就绪队列基于Redis的列表构建。
4.根据权利要求1所述的方法,其特征在于,还包括:
在推送成功之后,删除所述就绪队列中的所述消息ID和所述消息内容池中所述消息ID对应的消息内容。
5.一种延迟消息推送装置,其特征在于,应用于消息中间件,所述装置包括:
获取模块,用于获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间;
处理模块,用于基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;
轮询模块,用于定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,执行推送模块;其中,每个就绪队列与一个业务终端相对应,对于不同的业务终端会配置不同的就绪队列;一个业务终端至少分配一个就绪队列;
推送模块,用于基于所述消息ID从所述消息内容池中读取对应的消息内容,执行推送;
所述实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送的轮询模块,具体用于:
若所述业务终端对应一个就绪队列,实时扫描所述就绪队列,当所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;若所述业务终端对应多个就绪队列,实时轮询所述多个就绪队列,若所述多个就绪队列中任意就绪队列存在消息ID,基于预先配置读取一个或多个消息ID;基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
6.根据权利要求5所述的装置,其特征在于,所述基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池的处理模块,具体用于:
比较所述推送时间与所述延迟队列中已存储的推送时间的大小,确定所述推送时间在所述延迟队列中的位置,所述延迟队列基于Redis的有序集合构建,所述推送时间由小至大依次从所述延迟队列的头部开始排列;将所述推送时间结合所述消息ID存储于所述延迟队列确定的位置;将所述待推送延迟消息的消息内容以Redis的键值对的形式存储于消息内容池,所述Redis的键值对中键为所述消息ID,值为所述消息内容。
7.根据权利要求5所述的装置,其特征在于,所述定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列的轮询模块,具体用于:
定时轮询存储于所述延迟队列头部的推送时间;若所述推送时间到达或超过当前时间,基于所述推送时间对应的消息ID中的就绪队列ID确定就绪队列;将所述消息ID迁移至所述就绪队列,所述就绪队列基于Redis的列表构建。
8.根据权利要求5所述的装置,其特征在于,所述处理模块,还用于:
在推送成功之后,删除所述就绪队列中的所述消息ID和所述消息内容池中所述消息ID对应的消息内容。
9.一种消息中间件,其特征在于,所述消息中间件包括:服务器和客户端;
所述客户端,用于连接业务终端和所述服务器,以及在所述服务器轮询到就绪队列中存在消息ID时,基于所述消息ID从所述消息内容池中读取对应的消息内容执行推送;
所述服务器,用于获取业务终端的待推送延迟消息和消息ID,所述消息ID包括业务终端ID、就绪队列ID和延迟推送时间,基于所述延迟推送时间和当前时间确定所述待推送延迟消息的推送时间;基于所述推送时间将所述消息ID存储于延迟队列,并将所述待推送延迟消息的消息内容和所述消息ID存储于消息内容池;针对不同的业务终端分配一个延迟队列;对于不同的业务终端会配置不同的就绪队列;一个业务终端至少分配一个就绪队列,每一个就绪队列对应的一个就绪队列ID;定时扫描所述延迟队列中的推送时间,将到达或超过当前时间的推送时间对应的消息ID迁移至所述消息ID中就绪队列ID所指示的就绪队列;实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,执行所述客户端;
所述实时轮询就绪队列,若轮询到所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送,包括:
若所述业务终端对应一个就绪队列,实时扫描所述就绪队列,当所述就绪队列中存在消息ID时,由所述消息内容池中读取对应所述消息ID的消息内容执行推送;
若所述业务终端对应多个就绪队列,实时轮询所述多个就绪队列,若所述多个就绪队列中任意就绪队列存在消息ID,基于预先配置读取一个或多个消息ID;
基于读取的一个或多个消息ID从所述消息内容池中读取对应的消息内容执行推送。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011535977.5A CN112702259B (zh) | 2020-12-23 | 2020-12-23 | 延迟消息推送方法、装置及消息中间件 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011535977.5A CN112702259B (zh) | 2020-12-23 | 2020-12-23 | 延迟消息推送方法、装置及消息中间件 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112702259A CN112702259A (zh) | 2021-04-23 |
CN112702259B true CN112702259B (zh) | 2023-05-23 |
Family
ID=75511005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011535977.5A Active CN112702259B (zh) | 2020-12-23 | 2020-12-23 | 延迟消息推送方法、装置及消息中间件 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112702259B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113419832A (zh) * | 2021-06-24 | 2021-09-21 | 广州欢网科技有限责任公司 | 一种延迟任务的处理方法、装置及终端 |
CN114221925B (zh) * | 2021-09-30 | 2024-05-03 | 北京奇艺世纪科技有限公司 | 消息推送方法、装置、电子设备及存储介质 |
CN114003327A (zh) * | 2021-10-29 | 2022-02-01 | 北京达佳互联信息技术有限公司 | 一种消息推送方法、装置、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
CN108984318A (zh) * | 2018-06-22 | 2018-12-11 | 广州唯品会信息科技有限公司 | 基于驱动模型的消息投递方法、装置及可读存储介质 |
CN110719318A (zh) * | 2019-09-06 | 2020-01-21 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 消息处理方法和系统 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1853044B1 (en) * | 2006-05-02 | 2009-01-14 | Research In Motion Limited | Push framework for delivery of dynamic mobile content |
US9584593B2 (en) * | 2014-06-27 | 2017-02-28 | Amazon Technologies, Inc. | Failure management in a distributed strict queue |
CN108132845A (zh) * | 2016-12-01 | 2018-06-08 | 阿里巴巴集团控股有限公司 | 消息存储、投递方法和装置以及电子设备 |
CN109743137B (zh) * | 2019-01-10 | 2022-01-14 | 浙江小泰科技有限公司 | 一种支持更新的分布式延迟消息队列处理系统 |
CN110139229B (zh) * | 2019-04-15 | 2022-03-29 | 平安科技(深圳)有限公司 | 延时发送短信的方法、装置、计算机设备和存储介质 |
CN110457141B (zh) * | 2019-07-04 | 2023-12-05 | 创新先进技术有限公司 | 一种业务消息的处理方法、系统、装置及设备 |
CN110636130B (zh) * | 2019-09-23 | 2022-10-04 | 上海钧正网络科技有限公司 | 延时消息处理方法、装置、计算机设备和存储介质 |
CN110662085B (zh) * | 2019-10-16 | 2021-10-01 | 北京字节跳动网络技术有限公司 | 消息发送方法、装置、可读介质及电子设备 |
CN111045806A (zh) * | 2019-12-16 | 2020-04-21 | 云南优鸟科技有限公司 | 延迟消息队列实现方法以及系统 |
CN111124653A (zh) * | 2019-12-31 | 2020-05-08 | 江苏满运软件科技有限公司 | 延迟消息处理方法、系统、设备和存储介质 |
CN111782414B (zh) * | 2020-05-12 | 2024-04-19 | 北京皮尔布莱尼软件有限公司 | 一种延时消息处理方法及系统 |
-
2020
- 2020-12-23 CN CN202011535977.5A patent/CN112702259B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
CN108984318A (zh) * | 2018-06-22 | 2018-12-11 | 广州唯品会信息科技有限公司 | 基于驱动模型的消息投递方法、装置及可读存储介质 |
CN110719318A (zh) * | 2019-09-06 | 2020-01-21 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 消息处理方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112702259A (zh) | 2021-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112702259B (zh) | 延迟消息推送方法、装置及消息中间件 | |
CN111555963B (zh) | 消息推送方法、装置、电子设备及存储介质 | |
KR100747466B1 (ko) | 추가 속성을 가지는 노드를 이용하는 장치 관리 방법 및장치 관리 클라이언트 | |
CN107613529B (zh) | 消息处理方法以及基站 | |
CN105468707A (zh) | 一种基于缓存的数据处理方法及装置 | |
CN104333501B (zh) | 一种联系人列表的显示方法及装置 | |
CN112925661A (zh) | 消息处理方法、装置、计算机设备及存储介质 | |
CN109842621B (zh) | 一种减少token存储数量的方法及终端 | |
CN111817984B (zh) | 消息发送方法、装置、设备及存储介质 | |
CN103220352A (zh) | 终端、服务器、文件存储系统和文件存储方法 | |
CN102780603A (zh) | 网站流量控制方法及装置 | |
CN112583923A (zh) | 一种文件传输方法、设备和存储介质 | |
CN111431952B (zh) | 消息推送方法、装置及系统,计算机存储介质和电子设备 | |
CN110888790B (zh) | 日志管理方法及装置、电子设备、存储介质 | |
CN106790653B (zh) | 文件传输处理方法及装置 | |
CN107819823A (zh) | 一种信息处理方法、服务器及计算机可读存储介质 | |
CN114363304B (zh) | Rtp视频流存储、播放方法及装置 | |
CN105554712B (zh) | 一种短信处理方法及用户终端 | |
CN111309693A (zh) | 一种数据同步方法、装置、系统、电子设备及存储介质 | |
CN114402313A (zh) | 标签更新方法、装置、电子设备及存储介质 | |
CN108287793A (zh) | 响应消息的缓冲方法及服务器 | |
CN110502485B (zh) | 文件创建方法、客户端、元数据服务器及系统 | |
CN114153698A (zh) | 显示监控方法、装置、电子设备和可读存储介质 | |
CN110069493B (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN111291127A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231113 Address after: 100190 901-1, Floor 9, Building 3, No. 2 Academy South Road, Haidian District, Beijing Patentee after: Beijing Bodian Zhihe Technology Co.,Ltd. Address before: 100190 1001-3, 10th floor, building 3, No.2 Academy of Sciences South Road, Haidian District, Beijing Patentee before: BEIJING JIAODIAN XINGANXIAN INFORMATION TECHNOLOGY CO.,LTD. |
|
TR01 | Transfer of patent right |