一种发送消息的方法及其系统技术方案

技术编号:8934433 阅读:122 留言:0更新日期:2013-07-18 03:00
本申请提供了一种发送消息的方法及其系统,包括:判断N个消息发送进程中每个消息发送进程的状态是否是有效状态;基于所述判断,从N个消息发送进程中确定K个消息发送进程的状为有效状态,其中K为大于1但小于等于N的整数;从K个消息发送进程中,确定一个消息发送进程作为主消息发送进程;通过主消息发送进程去启动主消息发送进程所在消息任务服务器中的消息调度器;通过消息调度器,从数据库的消息队列中获得至少一个没有进程归属的待发送消息;从K个消息发送进程中,为至少一个没有进程归属的待发送消息中每个待发送消息分配一个消息发送进程;通过K个消息发送进程发送至少一个没有进程归属的待发送消息。

【技术实现步骤摘要】

本申请涉及计算机分布式系统领域,尤其涉及一种分布式系统中发送消息的方法及其系统
技术介绍
随着淘宝商城不断发展,其中的商家不断增加,用户也越来越多,为了更好实现对用户的服务或商家的服务,就需要将很多消息要发给商家或用户,如发送旺旺消息,淘宝站内的信,短消息及邮件等。一般情况下,上述信息都是通过分布式系统发送消息给用户或商家,而为了使消息能够高效的发送,分布式系统采用并发的方式发送消息。下面请参考图1,其为本申请实施例中分布式系统消息分发的结构示意图。消息发送系统提供对外接口,以接收来自发送者的消息并保存在消息队列中,再由消息发送进程分发给接收者。本申请专利技术人在实现本申请实施例中技术方案的过程中,发现上述现有技术至少存在如下技术问题:在读取消息队列的过程中,系统采用单线程读取多线程分发的模式,即每次只保证有一个进程在读取消息,然后再开始分发消息。因需保证只有一个进程在读取消息,系统引入了锁竞争,故而每次进程都需要判断是否可读。具体来说,系统通过加锁的方式保证只有一个进程在读取,由于数据库本身机制的原因,在多线程并发的情况下,可能会造成死锁。并发的线程越多,造成死锁的概率就越大。可见,在现有技术中,多进程读取消息使得系统在发送消息的过程中,非常容易造成死锁,从而降低系统发送消息的效率。
技术实现思路
本申请提供了一种发送消息的方法及其系统,以解决了因保证只有一个任务在读取消息时而造成的死锁的技术问题,消除了锁竞争,提高了消息发送效率。一方面,通过本申请的一个实施例,提供如下技术方案:一种发送消息的方法,应用在包括有数据库,与所述数据库连接的M个应用服务器和与所述数据库连接的至少N个消息任务服务器的系统中,其中,所述N个消息任务服务器中每个消息任务服务器包括有一个消息发送进程,M为大于或等于I的整数,N为大于或等于2的整数,所述方法包括:判断所述N个消息发送进程中每个消息发送进程的状态是否是有效状态;基于所述判断,从所述N个消息发送进程中确定K个消息发送进程的状为有效状态,其中K为大于I但小于N的整数;从所述K个消息发送进程中,确定一个消息发送进程作为主消息发送进程;通过所述主消息发送进程去启动所述主消息发送进程所在消息任务服务器中的消息调度器;通过所述消息调度器,从所述数据库的消息队列中获得至少一个没有进程归属的待发送消息;从所述K个消息发送进程中,为所述至少一个没有进程归属的待发送消息中每个待发送消息分配一个消息发送进程;通过所述K个消息发送进程发送所述至少一个没有进程归属的待发送消息。另一方面,通过本申请的一个实施例,提供如下技术方案:一种发送消息的系统,包括:M个应用服务器,与至少一个发送端连接,用于接收所述至少一个发送端发送的待发送消息,其中,所述M个应用服务器中每个应用服务器包括一个消息发送接口,M为大于或等于I的整数;数据库,与所述M个应用服务器连接,用于通过每个应用服务器的所述消息发送,接收所述至少一个待发送消息,并将所述至少一个待发送消息放在一消息队列中;N个消息任务服务器,与所述数据库连接,所述N个消息任务服务器中每个消息任务服务器包括有一个消息发送进程;其中,所述N个消息发送进程中有K个消息发送进程的状态为有效状态,所述K个消息发送进程中有一个为主消息发送进程;其中,所述主消息发送进程对应的消息任务服务器用于:通过所述主消息发送进程启动所述主消息发送进程所在消息任务服务器中的消息调度器;通过所述消息调度器,从所述数据库的消息队列中获得至少一个没有进程归属的待发送消息;从所述K个消息发送进程中,为所述至少一个没有进程归属的待发送消息中每个待发送消息分配一个消息发送进程;通过所述K个消息发送进程发送所述至少一个没有进程归属的待发送消息。上述技术方案中的一个或多个技术方案具有如下优点或有益效果:一、通过采用在任务分发过程中进行消息调度的方法,解决了任务分发过程中任务竞争消息造成死锁的技术问题,从而避免了死锁,达到了高效发送消息的技术效果。二、由于在消息分发的过程中采用了心跳检测的技术手段,解决了消息发送过程中,检测各个任务的有效性,从而达到了及时更新任务状态的技术效果。三、通过采用消息调度算法和心跳检测的技术手段,解决了消息在发送过程中,因任务暂停而导致消息闲置等待处理的问题,从而达到了智能的将未发送完成的消息转移到可用任务的技术效果。附图说明图1为现有技术中分布式系统消息分发的结构示意图;图2为本申请实施例一中消息发送的方法流程图;图3为本申请实施例中分配消息发送进程的流程图;图4为本申请实施例中发送待发送消息的流程图5为本申请实施例中消息分配的示例图;图6为本申请实施例中消息发送进程的总体流程图;图7为本申请实施例中主消息发送进程的调度流程图;图8为本申请实施例中分布式系统功能模块图。具体实施例方式为了使本申请所属
中的技术人员更清楚地理解本申请,下面结合附图,通过具体的实施例对本申请技术方案作详细描述。本申请实施例一提供了 一种消息发送方法,在本实施例中,所述方法应用在一个包括有数据库、应用服务器和消息任务服务器的系统中,所述应用服务器用于产生消息,t匕如产生淘宝站内信、短消息和发送邮件等等,所述数据库用于存放所述应用服务器产生的此类消息信息,当消息任务服务器需要从数据库中提取消息时,数据库就按照消息队列的顺序将存放的消息传给所述消息任务服务器。而所述消息任务服务器就对所述数据库存放的消息进行调度以及将上述消息进行发送。所述消息任务服务器在进行调度的时,由于采用多进程机制,因此消息任务服务器会为每个消息调度进程自动分配编号或者由技术人员根据实际情况具体设定。下面请参考图2,为本申请实施例一中消息发送的方法流程图;步骤200,判断所述N个消息发送进程中每个消息发送进程的状态是否是有效状态;在具体的实施过程中,应用服务器将创建的消息存放在数据库中,消息任务服务器将基于创建的消息,创建多个消息发送进程,以N作为参数表示所述多个消息发送进程,具体来讲,该步骤将从N个消息发送进程中,判断每个消息发送进程的状态是否是有效状态,可以是判断每个消息发送进程是否已经注册,若是注册的消息发送进程,其状态即为有效,反之,消息发送进程的状态则为无效。步骤210,基于所述判断,从所述N个消息发送进程中确定K个消息发送进程的状为有效状态;在具体的实施过程中,基于步骤200的判断,从所述N个消息发送进程中确定K个消息发送进程的状态为有效状态,所述K仅作为一个表示有效状态的消息发送进程的参数,因为有效状态的进程数量是小于等于消息发送进程的数量的,所以,K为大于I但小于等于N的整数。步骤220,从所述K个消息发送进程中,确定一个消息发送进程作为主消息发送进程;在具体的实施过程中,可首先检查K个消息发送该进程中每个消息发送进程是否注册,对于在所述K个消息发送该进程中已经注册的消息发送进程,通过心跳线程判断所述已经注册的消息发送进程中每个消息发送进程的状态是暂停还是有效;对于所述已经注册的消息发送进程中状态为暂停的消息发送进程,更新消息发送状态为有效;对于在所述K个消息发送进程中未注册的消息发送进程,先注册所述未注册的消息发送进程中每个消息发送进程,然后通过心跳线程判断注册的消息发送进程的状态是暂停还是本文档来自技高网
...

【技术保护点】
一种发送消息的方法,其特征在于,应用在包括有数据库,与所述数据库连接的M个应用服务器和与所述数据库连接的至少N个消息任务服务器的系统中,其中,所述N个消息任务服务器中每个消息任务服务器包括有一个消息发送进程,M为大于或等于1的整数,所述方法包括:判断所述N个消息发送进程中每个消息发送进程的状态是否是有效状态;基于所述判断,从所述N个消息发送进程中确定K个消息发送进程的状为有效状态,其中,K为大于1但小于等于N的整数;从所述K个消息发送进程中,确定一个消息发送进程作为主消息发送进程;通过所述主消息发送进程启动所述主消息发送进程所在消息任务服务器中的消息调度器;通过所述消息调度器,从所述数据库的消息队列中获得至少一个没有进程归属的待发送消息;从所述K个消息发送进程中,为所述至少一个没有进程归属的待发送消息中每个待发送消息分配一个消息发送进程;通过所述K个消息发送进程发送所述至少一个没有进程归属的待发送消息。

【技术特征摘要】

【专利技术属性】
技术研发人员:韩翼
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1