CN114915652B - 一种消息推送方法、装置、电子设备及存储介质 - Google Patents
一种消息推送方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114915652B CN114915652B CN202210333802.9A CN202210333802A CN114915652B CN 114915652 B CN114915652 B CN 114915652B CN 202210333802 A CN202210333802 A CN 202210333802A CN 114915652 B CN114915652 B CN 114915652B
- Authority
- CN
- China
- Prior art keywords
- push
- message
- pushing
- time
- content
- 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 72
- 230000002776 aggregation Effects 0.000 claims abstract description 135
- 238000004220 aggregation Methods 0.000 claims abstract description 135
- 230000008569 process Effects 0.000 claims abstract description 20
- 230000004931 aggregating effect Effects 0.000 claims description 17
- 238000004891 communication Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006870 function 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
- 238000006116 polymerization reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/14—Session management
- H04L67/146—Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/28—Timers or timing mechanisms used in protocols
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请涉及一种消息推送方法、装置、电子设备以及存储介质,其中方法通过获取预推送消息指令中的预推送时间,在预推送时间到达时直接将预推送内容推送到预推送设备中,也即在接收预推送指令时即获取到预推送时间,并根据该预推送时间进行消息推送,避免了在接收到消息推送指令时,由消息发送平台设置等待时间,导致损失预推送消息的实时性的问题,缩短了预推送消息下发延时,提升了预推送消息下发的实时性;并在预推送时间达到的过程中,对具有相同预推送消息的预推送设备进行聚合,进而节约了系统资源,同时聚合后统一推送,节约了系统推送链路资源,进而提升了用户体验。
Description
技术领域
本申请涉及信息技术领域,尤其涉及一种消息推送方法、装置、电子设备及存储介质。
背景技术
实时性问题随着互联网的发展,用户通过终端设备获取到的应用服务也越来越多,并且应用程序的服务端能够通过消息推送的方式向客户端推送各种资讯,来提醒用户可以通过应用程序获取哪些新的服务,目前,相关推送技术中,对以同一批次第一条推送消息的受理时间为聚合窗口的起点,向后等待一段时间,这段时间能聚合多少设备就聚合多少,然后在一段时间窗口结束后以单条消息多个设备的形式来进行设备批量下发,极大的节省了下游至厂商的链路资源,但是由于每条实时消息都需要在窗口期进行等待,导致客户端无法实时接收到服务端推送的消息,导致客户端接收到的推送消息的实时性受到了折损,影响用户体验。
发明内容
本申请提供了一种消息推送方法、装置、电子设备及存储介质,以解决相关技术中消息推送时,实时性受到折损的问题。
第一方面,本申请提供了一种消息推送方法,所述消息推送方法,包括:当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示将所述预推送内容推送到预推送设备的期望时间;基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;对等待所述预推送时间到达的过程中接收到的所有预推送消息指令,进行解析,以在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
可选地,基于所述预推送时间,将所述预推送内容添加到缓存,包括:根据所述预推送时间和所述预推送内容生成唯一消息标识,所述唯一消息标识用于在缓存中确定所述预推送内容;将所述唯一消息标识和所述预推送内容添加到缓存中。
可选地,在生成与所述预推送消息对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中,包括:生成所述聚合设备集,并将所述聚合设备集与所述唯一消息标识绑定,以使得所述聚合设备集与所述预推送内容对应;将预推送设备添加到所述聚合设备集中。
可选地,在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集,包括:当预推送消息指令包含所述预推送消息时,判定预推送消息指令符合所述聚合条件;将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到所述聚合设备集。
可选地,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送消息推送到所述聚合设备集中的各个预推送设备之前,所述方法还包括:将所述唯一消息标识添加到缓存队列中,并根据所述预推送时间设置延时时长,所述缓存队列用于根据所述预推送时间对所述唯一消息标识对应的所述预推送内容进行延迟。
可选地,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备,包括:当所述唯一消息标识在所述缓存队列中达到出队时间时,判定当前时间达到所述预推送时间;根据所述唯一消息标识从缓存中取出所述预推送内容,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
可选地,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备之后,所述方法还包括:将所述预推送内容从缓存中删除,并删除所述聚合设备集。
第二方面,本申请提供了一种消息推送装置,所述消息推送装置,包括:解析模块,所述解析模块用于当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示所述预推送内容推送到预推送设备的期望时间;聚合模块,所述聚合模块用于基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;所述解析模块还用于解析等待所述预推送时间到达的过程中,接收到的所有预推送消息指令,以在预推送消息指令中包含所述预推送消息时,将预推送消息指令中包含的预推送设备聚合到聚合设备集;推送模块,所述推送模块用于在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
第三方面,提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现第一方面任一项实施例所述的消息推送方法的步骤。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项实施例所述的消息推送方法的步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
本申请实施例提供的该方法,当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示将所述预推送内容推送到预推送设备的期望时间;基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;对等待所述预推送时间到达的过程中接收到的所有预推送消息指令,进行解析,以在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备,其中,通过获取预推送消息指令中的预推送时间,在预推送时间到达时直接将预推送内容推送到预推送设备中,也即通过获取预推送消息指令中的预推送时间,在预推送时间到达时直接将预推送内容推送到预推送设备中,也即在接收预推送指令时即获取到预推送时间,并根据该预推送时间进行消息推送,避免了在接收到消息推送指令时,由消息发送平台设置等待时间,导致损失预推送消息的实时性的问题,缩短了预推送消息下发延时,提升了预推送消息下发的实时性;并在预推送时间达到的过程中,对具有相同预推送消息的预推送设备进行聚合,进而节约了系统资源,同时聚合后统一推送,节约了系统推送链路资源,进而提升了用户体验。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种消息推送方法的流程示意图;
图2为本申请实施例提供的一种根据期望下发的时间得到窗口期的基本示意图;
图3为本申请实施例提供的一种聚合消息的基本流程图;
图4为本申请实施例提供的一种消息下发时的基本流程示意图;
图5为本申请实施例提供的一种消息推送装置的基本结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
以下对本发明实施例的技术方案的实现细节进行详细阐述:
图1为本申请实施例提供的一种消息推送方法的基本流程示意图,如图1所示,所述消息推送方法,包括:
S101、当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示将所述预推送内容推送到预推送设备的期望时间;
S102、基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;
S103、对等待所述预推送时间到达的过程中接收到的所有预推送消息指令,进行解析,以在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;
S104、在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
应当理解的是,本示例提供的消息推送方法应用于消息推送平台,该消息推送平台设置在终端和/或服务器,也即,该消息推送平台可以是单独运行在终端或是服务器,也可以是运行在终端和服务器组合形成的网络系统中;其中,终端可以以各种形式来实施。例如,本发明中描述的终端可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal Digital Assistant,PDA)、便捷式媒体播放器(Portable Media Player,PMP)、导航装置、可穿戴设备、智能手环、计步器等移动终端,以及诸如数字TV、台式计算机等固定终端,下面以消息推送方法应用于服务器为例进行说明。
应当理解的是,其中,预推送消息指令是由消息推送方发出,消息推送方可以是后台服务器;当消息推送方在需要推送消息时,发出预推送消息指令到消息推送平台,其中,消息推送方可以是在接收到相关人员的命令时,判定需要推送消息到推送设备,例如,相关人员确定推送消息需要推送给推送设备时,发出命令给消息推送方,消息推送方根据命令发出预推送消息指令到消息推送平台;消息推送方还可以是在满足预设的推送条件时,判定需要推送消息到推送设备;例如,当预设的推送条件为定时推送排行榜第一的内容时,在定时时间满足时,则判定需要推送消息到推送设备;可以理解的是,其中预推送消息指令中包含了预推送时间,也即,由消息推送方来决定预推送内容的预推送时间,然后发送给消息推送平台,消息推送平台直接根据该预推送时间来进行推送,避免了在消息推送方发送推送消息到消息推送平台时,消息推送平台经过了固定时间的聚合后,就产生了相应时长的延时,导致消息推送方想要推送的内容实时性受到损失的问题。
可以理解的是,其中,将预推送内容推送至聚合设备集中的预推送设备,包括,将预推送内容推送至所述预推送设备聚合设备集中的每一个预推送设备;同时,缓存中包含多条预推送内容,每一预推送内容具有唯一性,其中可以通过设置唯一消息标识的方式来保证缓存中每一预推送内容的唯一性。
承接上例,基于所述预推送时间,将所述预推送内容添加到缓存,包括:根据所述预推送时间和所述预推送内容生成唯一消息标识,所述唯一消息标识用于在缓存中确定所述预推送内容;将所述唯一消息标识和所述预推送内容添加到缓存中。应当理解的是,根据所述预推送时间和所述预推送内容生成唯一消息标识,也即,根据该唯一消息标识能够查找到对应的预推送内容和预推送时间,然后将唯一消息标识和预推送内容添加到缓存中,以便达到预推送时间时,可以直接根据该唯一消息标识从缓存中取出该唯一消息标识对应的预推送内容,且当多条预推送消息指令的预推送消息相同,仅预推送设备不同时,则多条预推送消息指令具有相同的唯一消息标识。
承接上例,例如,接收到A预推送消息指令,A预推送消息指令包含:A预推送时间、A预推送内容、A预推送设备,根据A预推送时间和A预推送内容生成唯一消息标识;在例如,接收到A、B以及C三条预推送消息指令,A预推送消息指令包含:A预推送时间、A预推送内容、A预推送设备,B预推送消息指令包含:A预推送时间、A预推送内容、B预推送设备;C预推送消息指令包含:A预推送时间、A预推送内容、C预推送设备,A、B、C三条预推送消息指令均为根据A预推送时间和A预推送内容生成唯一消息标识,所以,A、B、C三条预推送消息指令的唯一消息标识相同;
应当理解的是,将所述唯一消息标识和所述预推送内容添加到缓存中之前,所述方法还包括:判断缓存中是否存在根据所述预推送时间和所述预推送内容生成唯一消息标识,若否,则将唯一消息标识和所述预推送内容添加到缓存中;可以理解的是,若缓存中不存在该唯一标识,则表明是第一次接收到该唯一消息标识对应的预推送时间和所述预推送内容;若缓存中存在该唯一标识,则表明不是第一次接收到该唯一消息标识对应的预推送时间和所述预推送内容,直接进入步骤S103即可。
具体的,例如,接收到A预推送消息指令,A预推送消息指令包含:A预推送时间、A预推送内容、A预推送设备,根据A预推送时间、A预推送内容生成得到唯一消息标识messageId,查询消息库Couchbase缓存中是否已经有该唯一消息标识messageId,在缓存中没有该唯一消息标识messageId时,将该唯一消息标识messageId和预推送内容添加到消息库的缓存中,Couchbase:{messageId:A预推送内容}。
应当理解的是,在一些示例中,除了根据预推送时间和所述预推送内容来生成唯一消息标识,进而在缓存中保证预推送内容的唯一性之外,还可以直接存储预推送时间、预推送内容的集合,同样可以保证预推送内容的唯一性,例如,接收到A预推送消息指令,A预推送消息指令包括:A预推送时间、A预推送内容、A预推送设备,在缓存中不存在{A预推送时间、A预推送内容}的集合时,直接在缓存中存储该集合,Couchbase:{A预推送时间:A预推送内容}。
在本实施例的一些示例中,在生成与所述预推送消息对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中,包括:生成所述聚合设备集,并将所述聚合设备集与所述唯一消息标识绑定,以使得所述聚合设备集与所述预推送内容对应;将预推送设备添加到所述聚合设备集中。其中生成聚合设备集包括:在存储设备中生成聚合设备集,并将聚合设备集与唯一消息标识绑定,具体的,例如,存储设备为redis,接收到A预推送消息指令,A预推送消息指令包括:A预推送时间、A预推送内容、A预推送设备,根据A预推送时间、A预推送内容生成得到唯一消息标识messageId,在生成redis中生成一个聚合设备集[],此时该聚合设备集[]为空,然后在redis中将messageId与该聚合设备集[]绑定,得到Redis:messageId:[],然后将A预推送设备添加到该聚合设备集中,得到Redis:messageId:[“A预推送设备”]。
在本实施例的一些示例中,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送消息推送到所述聚合设备集中的各个预推送设备之前,所述方法还包括:将所述唯一消息标识添加到缓存队列中,并根据所述预推送时间设置延时时长,所述缓存队列用于根据所述预推送时间对所述唯一消息标识对应的所述预推送内容进行延迟。
应当理解的是,预推送时间为消息期望下发时间effectiveTime,且预推送时间可以是一个准确的时间,例如,预推送时间为2022年2月28日8:00:00点,则当时间达到2022年2月28日8:00:00时,判定当前时间达到所述预推送时间;预推送时间还可以是一个时间段,例如,预推送时间为20分钟后,此时,则从接收到推送消息指令的时间开始计时,在计时达到20分钟后,判定当前时间达到所述预推送时间;具体的,消息推送平台接收到该推送消息指令的时间为2022年2月28日8:00:00时,该推送消息指令中的预推送时间为20分钟,则从接收到推送消息指令的时间开始计时,在时间达到2022年2月28日8:20:00时,判定前时间达到所述预推送时间。
承接上例,具体的,在基于所述预推送时间,将所述预推送内容添加到缓存时,将唯一消息标识添加到延迟队列中,此时,基于消息推送方调用推送接口push api的时间点下发预推送消息指令的时间为requestTime,预推送时间为effectiveTime,则此时指定延时时长为effectiveTime-requestTime;例如,接收到A预推送消息指令,A预推送消息指令包括:A预推送时间、A预推送内容、A预推送设备,根据A预推送时间、A预推送内容生成得到唯一消息标识messageId,在将messageId添加到缓存中时,将该messageId同样添加到缓存队列RMQ中,此时缓存队列RMQ包括:|…|msg|msg|messageId|msg|,其中,上述msg为其他的唯一消息标识。
在本实施例的一些示例中,在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集,包括:当预推送消息指令包含所述预推送消息时,判定预推送消息指令符合所述聚合条件;将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集。具体的,当接收到任一预推送消息指令时,对该预推送消息指令进行解析,以获得该预推送消息指令中包含的预推送时间、预推送内容以及预推送设备,然后根据该预推送时间、预推送内容生成唯一消息标识,然后查找缓存中是否包括该唯一消息标识,当缓存中包括该唯一消息标识时,判定预推送消息指令包含所述预推送消息,符合聚合条件,则将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;可以理解的是,在查找缓存中是否包括该唯一消息标识的方式本实施例并不做限制,可以由相关人员灵活设置,例如,可以通过哈希查找、遍历查找任一查找方式。
承接上例,例如,先后接收到A、B两条预推送消息指令,其中A推送消息指令包括:A预推送内容、A预推送时间以及A预推送设备;B推送消息指令包括:A预推送内容、A预推送时间以及B预推送设备;其中A预推送消息指令为先收到的推送消息指令,根据A推送消息指令对应的A预推送内容、A预推送时间计算得到消息标识为messageId,查询缓存Couchbase是否已经包括该messageId,在缓存中未包含该messageId时,将该messageId与A预推送内容一起添加到缓存中,并将该messageId添加到缓存队列RMQ中,根据预推送时间确定该messageId的延时时长,并生成与该messageId关联的聚合设备集,将该聚合设备集放入存储设备Redis后,将A推送设备作为预推送设备放入预推送设备聚合设备集中,此时,消息库Couchbase缓存中包括:messageId:A预推送内容;存储设备Redis中包括:messageId[“A预推送设备”],缓存队列RMQ中包括:|…|msg|msg|msg|messageId|;然后在对等待所述预推送时间到达的过程中接收到B预推送消息指令,根据B预推送消息指令中包括:A预推送内容、A预推送时间确定消息ID为messageId,查询到缓存Couchbase中已有该messageId,此时,直接将B预推送设备添加到聚合设备集,此时,缓存Couchbase包括:messageId:A预推送内容;存储设备Redis中包括:messageId[“A预推送设备”,“B预推送设备”],缓存队列RMQ中包括:|…|msg|msg|msg|messageId|,进而实现了在等待预推送时间的过程中,对相同的预推送消息的进行预推送设备聚合的效果,进而达到了在不损失预推送消息指令的实时性的前提下,避免了多次记录相同预推送消息,节约了系统资源以及推送链路。
在本实施例的一些示例中,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备,包括:当所述唯一消息标识在所述缓存队列中达到出队时间时,判定当前时间达到所述预推送时间;根据所述唯一消息标识从缓存中取出所述预推送内容,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
在本实施例的一些示例中,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备之后,所述方法还包括:将所述预推送内容从缓存中删除,并删除所述聚合设备集;应当理解的是,当已经将预推送内容推送至聚合设备集中的预推送设备时,则需要从缓存队列删除预推送内容的排队,并从缓存中删除该预推送内容,以及删除该预推送内容关联的预推送设备聚合设备集。
本实施例提供的消息推送方法,包括:当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示将所述预推送内容推送到预推送设备的期望时间;基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;对等待所述预推送时间到达的过程中接收到的所有预推送消息指令,进行解析,以在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送消息推送到所述聚合设备集中的各个预推送设备,其中,通过获取预推送消息指令中的预推送时间,在预推送时间到达时直接将预推送内容推送到预推送设备中,也即在接收预推送指令时即获取到预推送时间,并根据该预推送时间进行消息推送,避免了在接收到消息推送指令时,由消息发送平台设置等待时间,导致损失预推送消息的实时性的问题,缩短了预推送消息下发延时,提升了预推送消息下发的实时性;并在预推送时间达到的过程中,对具有相同预推送消息的预推送设备进行聚合,进而节约了系统资源,同时聚合后统一推送,节约了系统推送链路资源,进而提升了用户体验。
为了更好的理解本发明,本实施例提供一种更为具体的示例对本发明进行说明;
首先,制定消息聚合规则,即制定多条推送消息可合并为一条推送消息的规则如下:
此处给出1)推送消息的主要结构体:
消息id|消息title|消息content|消息期望下发时间effectiveTime|消息接收设备id|其他透传信息等;其中消息id为唯一消息标识,消息title与消息content共同组成预推送内容,消息期望下发时间effectiveTime为预推送时间,消息接收设备id为预推送设备;
以预推送内容与预推送时间为聚合key,当多条推送消息的title+content+
effectiveTime一样时,认为是可聚合,并以此聚合key为母字符串生成唯一的消息标识消息id,所以这多条消息的消息id都是同一个消息id。
以上文中提到的effectiveTime–接收到推送消息指令的时间requestTime为一个聚合窗口,例如AB两条预推送消息指令解析获得的推送消息可聚合(即AB的预推送内容和预推送时间相同,仅预推送设备不同)。
A预推送消息指令为先收到的消息,按顺序当A预推送消息指令进入系统后,计算得到A预推送消息指令的推送消息确定的消息id为messageId,查询消息库Couchbase缓存中是否已有此消息id,如果没有则将A的消息id添加到缓存中以入库Couchbase,然后把消息id:messageId发送到rmq延迟队列中,并指定延时时长为effectiveTime–requestTime,然后将消息A中的设备id入库redis设备集合中,上述两个存储结构如下所示:
Couchbase:key|value:消息id|消息体
Redis:key|value:消息id|设备set集合
上述流程结束后,上述存储中数据状态如下:
Couchbase:messageId:content
Redis:messageId:[“deviceA”]
RMQ:|…|msg|msg|msg|messageId|
在延时时长为effectiveTime–requestTime内,当B预推送消息指令进入系统后,计算得到B预推送消息指令的预推送消息确定的消息id也为messageId,查询Couchbase库中已有messageId(因为之前A已经插入),表明rmq延时队列已经有一条相同的消息id在排队(就是消息A的消息id),此时仅将B预推送消息指令中的设备id入库reids中messageId对应的设备集合value中,完成后上述存储状态如下:
Couchbase:messageId:content
Redis:messageId:[“deviceA”,“deviceB”]
RMQ:|…|msg|msg|messageId|msg|
在等待窗口期结束前,继续接收可与AB合并消息,循环执行上述流程……
窗口期结束后,也即messageId在RMQ队列延迟了effectiveTime–requestTime时长后,出队被消费,此时程序从Couchbase中删掉messageId这条记录,即释放锁,然后从Redis中取出聚合完成的设备列表,重新组装成一条新的消息发往下一环节。
具体的,截取一段push消息体片段进行说明,如下:
Controller:{
"effectiveTime":1610676801000
"expiredTime*:1610676901000
"platform":[1,2,5,6],
"version":{
"iphone*:">-4.0*
"ipad":"<-3.0",
"gphone":"!8.0"
"gpad":">7.0*
"region":"1",
"mod":"us"
"priority":"1",
"excludeRange":"0:5*
其中,controller节点属于控制节点,里面的信息用以对push进行各种管控,在这个part增加effectiveTime字段,表示计划发送时间:
-long型timestamp
-取整到分钟级别后再聚合
-以此字段区分常规实时请求和聚合请求
所以,这个effectiveTime决定了时间窗口有多久,effectiveTime字段由个性化push业务调用方来指定,即push业务调用方提前一段时间(一般可提前30分钟-1小时)调用push api接口来完成push下发,并在push消息中的controller节点增加effectiveTime参数来指定期望下发的时间点我们记调用pushapi的时间点为requestTime,期望下发的时间点为effectiveTime,那么窗口期就是effectiveTime–requestTime这段时间,如图2所示。
需要注意的是业务调用方提前调用下发接口的提前量并不算在整体下发延时中,相当于业务方把一部分消息调度权交到了消息推送平台中,延时统计的是期望下发时间和实际下发时间之间的差值。
其中,2)聚合模块:
利用rmq延迟队列,couchbase分布式锁和redis去重set集合来实现聚合功能.以上面第一步中得到的聚合时间窗口为一个窗口期,将此窗口期内相同消息内容不同设备的push聚合起来.聚合消息的流程图,如图3所示。
2-1)在收到push消息后,消息id作为key入库redis,如果redis不存在此key,则消息id入库,同时设备入库至此消息id对应的value集合,如果redis存在此key,则仅将设备聚合入此消息id对应的value集合。
2-2)将消息id加分布式锁,此处通过向分布式存储couchbase插入唯一消息id来实现,couchbase可以保证线程并发安全,即同一时刻仅能插入一条不存在的消息id,如果couchbase之前已经存在此消息id,则无法重复插入,增加此步骤的目的是避免重复的向延迟队列rmq发送延时消息,导致消息冗余重复和资源浪费。
2-3)向rmq消息队列发送延时消息,此消息会在rmq中间件等待指定延时时长后传递到消费者.
3)推送模块,消息推送时的流程图如图4所示:
3-1)接收rmq延迟队列消息,从消息中解析出携带的消息id从redis取出聚合设备列表,重新组装为批量设备的push消息,发给下游,同时清除redis里的消息id。
3-2)将此消息id解锁,即将其从couchbase中删掉,为下一个周期相同的消息id聚合留出空间。
3-3)以此消息id作为key,从redis中取出全部的设备set集合,也即待发送的聚合后的设备列表,将此设备列表拼接到原始的push消息体中,进行推送下发,至此完成全部的聚合发送流程。
应当理解的是,本实施例提供的消息推送方法,通过在推送消息指令中指定期望下发时间,可以理解为将push由个性化发送引擎转移并缓存到了发送平台侧,由发送平台侧等候发送时机,并在等候的过程中进行相同push内容的设备聚合.最终减push聚合后的实际下发时刻同期望下发时刻的差值,即从整体业务的角度上提升个性化push推送的准时性,避免了将同一时间窗口内的内容相同但目标设备不同的push消息进行了合并,并提前指定了每批次合并的时间窗口为20分钟,以同一批次第一条push的受理时间为聚合窗口的起点,向后等待20分钟,这20分钟能聚合多少设备就聚合多少,然后在20分钟时间窗口结束后以单条消息多个设备的形式来进行设备批量下发,导致的因延时聚合而引起的push实时性受损的问题。
基于相同的构思,本实施例提供一种消息推送装置,如图5所示,所述消息推送装置,包括:
解析模块1,所述解析模块1用于当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示所述预推送内容推送到预推送设备的期望时间;
聚合模块2,所述聚合模块2用于基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;
所述解析模块1还用于解析等待所述预推送时间到达的过程中,接收到的所有预推送消息指令,以在预推送消息指令中包含所述预推送消息时,将预推送消息指令中包含的预推送设备聚合到聚合设备集;
推送模块3,所述推送模块3用于在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
应当理解的是,本实施例提供的消息推送装置的各个模块之间的组合能够实现上述语音过滤方法的各个步骤,达到与上述语音过滤方法的各个步骤相同的技术效果,在此不再赘述。
如图6所示,本申请实施例提供了一种电子设备,包括处理器111、通信接口112、存储器113和通信总线114,其中,处理器111,通信接口112,存储器113通过通信总线114完成相互间的通信,
存储器113,用于存放计算机程序;
在本申请一个实施例中,处理器111,用于执行存储器113上所存放的程序时,实现前述任意一个方法实施例提供的消息推送方法,包括:
当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示将所述预推送内容推送到预推送设备的期望时间;
基于所述预推送时间,将所述预推送内容添加到缓存,并在生成与所述预推送内容对应的聚合设备集后,将预推送设备聚合到所述聚合设备集中;
对等待所述预推送时间到达的过程中接收到的所有预推送消息指令,进行解析,以在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;
在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送消息推送到所述聚合设备集中的各个预推送设备。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述任意一个方法实施例提供的消息推送方法的步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (7)
1.一种消息推送方法,其特征在于,所述消息推送方法,包括:
当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示将所述预推送内容推送到预推送设备的期望时间;
根据所述预推送时间和所述预推送内容生成唯一消息标识,所述唯一消息标识用于在缓存中确定所述预推送内容;
将所述唯一消息标识和所述预推送内容添加到缓存中;
生成聚合设备集,并将所述聚合设备集与所述唯一消息标识绑定,以使得所述聚合设备集与所述预推送内容对应;
将预推送设备添加到所述聚合设备集中;
对等待所述预推送时间到达的过程中接收到的所有预推送消息指令,进行解析,以在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集;
将所述唯一消息标识添加到缓存队列中,并根据所述预推送时间设置延时时长,所述缓存队列用于根据所述预推送时间对所述唯一消息标识对应的所述预推送内容进行延迟;
在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
2.根据权利要求1所述的方法,其特征在于,在预推送消息指令符合聚合条件时,将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到聚合设备集,包括:
当预推送消息指令包含所述预推送消息时,判定预推送消息指令符合所述聚合条件;
将符合所述聚合条件的预推送消息指令中包含的预推送设备聚合到所述聚合设备集。
3.根据权利要求1所述的方法,其特征在于,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备,包括:
当所述唯一消息标识在所述缓存队列中达到出队时间时,判定当前时间达到所述预推送时间;
根据所述唯一消息标识从缓存中取出所述预推送内容,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
4.根据权利要求1所述的方法,其特征在于,在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备之后,所述方法还包括:
将所述预推送内容从缓存中删除,并删除所述聚合设备集。
5.一种消息推送装置,其特征在于,所述消息推送装置,包括:
解析模块,所述解析模块用于当接收到预推送消息指令时,解析预推送消息指令以获取预推送消息指令中包含的预推送消息以及预推送设备,所述预推送消息包括:预推送时间、预推送内容;所述预推送时间用于指示所述预推送内容推送到预推送设备的期望时间;
聚合模块,所述聚合模块用于根据所述预推送时间和所述预推送内容生成唯一消息标识,所述唯一消息标识用于在缓存中确定所述预推送内容;
将所述唯一消息标识和所述预推送内容添加到缓存中;
生成聚合设备集,并将所述聚合设备集与所述唯一消息标识绑定,以使得所述聚合设备集与所述预推送内容对应;
将预推送设备添加到所述聚合设备集中;
所述解析模块还用于解析等待所述预推送时间到达的过程中,接收到的所有预推送消息指令,以在预推送消息指令中包含所述预推送消息时,将预推送消息指令中包含的预推送设备聚合到聚合设备集;
推送模块,所述推送模块用于将所述唯一消息标识添加到缓存队列中,并根据所述预推送时间设置延时时长,所述缓存队列用于根据所述预推送时间对所述唯一消息标识对应的所述预推送内容进行延迟,并在当前时间达到所述预推送时间时,将所述预推送内容从缓存中取出,并将所述预推送内容推送到所述聚合设备集中的各个预推送设备。
6.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4任一项所述的消息推送方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-4任一项所述的消息推送方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210333802.9A CN114915652B (zh) | 2022-03-30 | 2022-03-30 | 一种消息推送方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210333802.9A CN114915652B (zh) | 2022-03-30 | 2022-03-30 | 一种消息推送方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114915652A CN114915652A (zh) | 2022-08-16 |
CN114915652B true CN114915652B (zh) | 2024-03-15 |
Family
ID=82763185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210333802.9A Active CN114915652B (zh) | 2022-03-30 | 2022-03-30 | 一种消息推送方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114915652B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185665A (zh) * | 2023-02-28 | 2023-05-30 | 北京字跳网络技术有限公司 | 一种消息处理方法、装置、设备及介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2785391A1 (en) * | 2006-03-29 | 2007-09-29 | Research In Motion Limited | Apparatus, and associated method, for facilitating background processing of push content |
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
CN108564406A (zh) * | 2018-04-12 | 2018-09-21 | 北京京东尚科信息技术有限公司 | 一种激励推送的方法和装置 |
US10345987B1 (en) * | 2016-10-07 | 2019-07-09 | Snap Inc. | Content collection navigation queue |
CN112367246A (zh) * | 2020-10-30 | 2021-02-12 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、电子设备及存储介质 |
CN112637151A (zh) * | 2020-12-11 | 2021-04-09 | 深圳市英威腾电气股份有限公司 | 数据消息的传输方法、终端设备、服务器及存储介质 |
WO2021237433A1 (zh) * | 2020-05-26 | 2021-12-02 | 深圳市欢太科技有限公司 | 消息推送方法、装置、电子设备及计算机可读介质 |
CN113905090A (zh) * | 2021-09-16 | 2022-01-07 | 平安科技(深圳)有限公司 | 消息推送方法、装置、服务器、电子设备及存储介质 |
CN114221925A (zh) * | 2021-09-30 | 2022-03-22 | 北京奇艺世纪科技有限公司 | 消息推送方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10313463B2 (en) * | 2015-02-19 | 2019-06-04 | Akamai Technologies, Inc. | Systems and methods for avoiding server push of objects already cached at a client |
-
2022
- 2022-03-30 CN CN202210333802.9A patent/CN114915652B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2785391A1 (en) * | 2006-03-29 | 2007-09-29 | Research In Motion Limited | Apparatus, and associated method, for facilitating background processing of push content |
US10345987B1 (en) * | 2016-10-07 | 2019-07-09 | Snap Inc. | Content collection navigation queue |
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
CN108564406A (zh) * | 2018-04-12 | 2018-09-21 | 北京京东尚科信息技术有限公司 | 一种激励推送的方法和装置 |
WO2021237433A1 (zh) * | 2020-05-26 | 2021-12-02 | 深圳市欢太科技有限公司 | 消息推送方法、装置、电子设备及计算机可读介质 |
CN112367246A (zh) * | 2020-10-30 | 2021-02-12 | 深圳壹账通智能科技有限公司 | 消息推送方法、装置、电子设备及存储介质 |
CN112637151A (zh) * | 2020-12-11 | 2021-04-09 | 深圳市英威腾电气股份有限公司 | 数据消息的传输方法、终端设备、服务器及存储介质 |
CN113905090A (zh) * | 2021-09-16 | 2022-01-07 | 平安科技(深圳)有限公司 | 消息推送方法、装置、服务器、电子设备及存储介质 |
CN114221925A (zh) * | 2021-09-30 | 2022-03-22 | 北京奇艺世纪科技有限公司 | 消息推送方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114915652A (zh) | 2022-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102769640B (zh) | 用户信息的更新方法、服务器以及系统 | |
CN110377369B (zh) | 一种运行小程序的方法、设备和计算机存储介质 | |
CN111858586B (zh) | 一种数据处理的方法和装置 | |
CN111309747A (zh) | 数据同步方法、系统和装置 | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN114915652B (zh) | 一种消息推送方法、装置、电子设备及存储介质 | |
CN112015816A (zh) | 数据同步方法、装置、介质及电子设备 | |
CN112702259A (zh) | 延迟消息推送方法、装置及消息中间件 | |
CN110166159A (zh) | 一种基于gprs网络对时、电能表对时方法及系统 | |
WO2016107102A1 (zh) | 短信并发业务处理方法及装置 | |
CN113127225A (zh) | 一种数据处理任务的调度方法、装置和系统 | |
CN110704212A (zh) | 一种消息处理方法及装置 | |
US8510426B2 (en) | Communication and coordination between web services in a cloud-based computing environment | |
CN112948410A (zh) | 数据处理方法、装置、设备及介质 | |
CN117950850A (zh) | 一种数据传输方法、装置、电子设备及计算机可读介质 | |
CN114221925B (zh) | 消息推送方法、装置、电子设备及存储介质 | |
CN113783913A (zh) | 一种消息推送管理方法和装置 | |
CN112711485A (zh) | 一种消息处理方法和装置 | |
WO2023142605A1 (zh) | 一种基于区块链的数据处理方法和相关装置 | |
CN113645260A (zh) | 业务重试方法、装置、存储介质及电子设备 | |
US20100332604A1 (en) | Message selector-chaining | |
CN114048059A (zh) | 接口的超时时间调整方法、装置、计算机设备及存储介质 | |
US8539508B2 (en) | Message ordering using dynamically updated selectors | |
CN110705935B (zh) | 一种物流单据的处理方法和装置 | |
CN113722113A (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 |