消息推送方法及系统技术领域
本发明涉及通讯领域,特别涉及一种多线程任务模式的消息推送方法及系统。
背景技术
现有的消息推送方式采用单线程工作模式,即无论消息的数量有多大,都是逐条
推送的。举个例子,一个活动推广需要推送几十万的消息量,采用现有的消息推送方式动辄
需要十几个小时才能推送完成,推送耗时过长、推送效率低下,难以适应现在活动推广的步
伐。
发明内容
本发明要解决的技术问题是为了克服现有技术中采用单线程方式推送消息导致
推送效率低下的缺陷,提供一种多线程任务模式的消息推送方法及系统。
本发明是通过下述技术方案来解决上述技术问题的:
一种消息推送方法,其特点在于,包括以下步骤:
S1、通过主线程从数据库消息表中获取待推送消息,并将所述待推送消息放入消
息队列中;
S2、分别通过多个消费线程定时从所述消息队列中获取待推送消息,并将获取的
待推送消息依次推送至外部设备;
S3、判断所述消息队列是否为空,若是,则执行步骤S1,若否,执行步骤S2。
较佳地,通过每个消费线程从所述消息队列中获取待推送消息的数量均为至少一
个。
较佳地,通过每个消费线程从所述消息队列中获取待推送消息的周期不同。
较佳地,所述外部设备为移动终端。
本发明还提供一种消息推送系统,其特点在于,包括:
生产任务模块,用于通过主线程从数据库消息表中获取待推送消息,并将所述待
推送消息放入消息队列中;
消费任务模块,用于分别通过多个消费线程定时从所述消息队列中获取待推送消
息,并将获取的待推送消息依次推送至外部设备;
判断模块,用于判断所述消息队列是否为空,并在是的情况下调用所述生产任务
模块,以及在否的情况下调用所述消费任务模块。
较佳地,所述消费任务模块中,通过每个消费线程从所述消息队列中获取待推送
消息的数量均为至少一个。
较佳地,所述消费任务模块中,通过每个消费线程从所述消息队列中获取待推送
消息的周期不同。
较佳地,所述外部设备为移动终端。
在符合本领域常识的基础上,上述各优选条件,可任意组合,即得本发明各较佳实
例。
本发明的积极进步效果在于:与现有技术相比,本发明采用多线程任务模式向外
部设备推送消息,具体地,采用通过设定主线程从数据库消息表中获取待推送消息并将其
放入消息队列中,通过设定多个消费线程定时到消息队列中消费,实现了一次性大量推送
消息的目的,提高了推送效率。
附图说明
图1为本发明实施例的消息推送方法的流程图。
图2为本发明实施例的消息推送系统的结构框图。
具体实施方式
下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实
施例范围之中。
本实施例提供一种消息推送方法,如图1所示,包括以下步骤:
步骤101、通过主线程从数据库消息表中获取待推送消息,并将所述待推送消息放
入消息队列中。
步骤102、分别通过多个消费线程定时从所述消息队列中获取待推送消息,并将获
取的待推送消息依次推送至外部设备。
本实施例中,通过每个消费线程从所述消息队列中获取待推送消息的数量可以为
一个,也可以为多个。另外,不同消费线程从消息队列中获取待推送消息的数量可以相同,
也可以不同。
本实施例中,通过每个消费线程从所述消息队列中获取待推送消息的周期不同,
例如,消费线程A1每隔10ms从消息队列中获取一次待推送消息,消费线程A2每隔7ms从消息
队列中获取一次待推送消息。
所述外部设备可以为移动终端,例如手机、平板电脑等。每个消费线程依次将从消
息队列中获取到的待推送消息推送至外部设备,直至将所有获取到的待推送消息推送完
毕。
步骤103、判断所述消息队列是否为空,若是,则返回步骤101,若否,则返回步骤
102。
通过主线程从已有的数据库消息表中获取若干个待推送消息,并将获取的待推送
消息放入消息队列中。需要说明的是,数据库消息表的待推送消息是实时增加的,当消息队
列中待推送消息的数量为0时,说明已经完全被消费线程所消费,这时再通过主线程从数据
库消息表中获取新的待推送消息,并将其放入消息队列中,以供多个消费线程消费。这里所
说的消费是指,消费线程从消息队列中获取待推送消息。
举个具体的例子,设主线程从数据库消息表中获取了10000条与活动推广相关的
待推送消息,并将这些消息放入了消息队列中。消费线程的个数为15个,其中10个消费线程
均每隔20ms从消息队列中获取一次待推送消息,每次获取的数量为3条,且每个消费线程
20ms内发送完这3条消息,另外5个消费线程均每隔5ms从消息队列中获取一次待推送消息,
每次获取的数量为1条,且每个消费线程5ms内发送完这1条消息。那么只需要4s就能够将这
10000条待推送消息推送至大量的移动终端中,大大提升了活动推广的效率。
与现有技术相比,本实施例采用多线程任务模式向外部设备推送消息,具体地,采
用通过设定主线程从数据库消息表中获取待推送消息并将其放入消息队列中,通过设定多
个消费线程定时到消息队列中消费,实现了一次性大量推送消息的目的,提高了推送效率。
本实施例还提供一种消息推送系统20,如图2所示,包括生产任务模块21、消费任
务模块22和判断模块23。
生产任务模块21用于通过主线程从数据库消息表中获取待推送消息,并将所述待
推送消息放入消息队列中;
消费任务模块22用于分别通过多个消费线程定时从所述消息队列中获取待推送
消息,并将获取的待推送消息依次推送至外部设备;
判断模块23用于判断所述消息队列是否为空,并在是的情况下调用生产任务模块
21,以及在否的情况下调用消费任务模块22。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些
仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背
离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更
和修改均落入本发明的保护范围。