一种消息分发方法、装置及设备与流程

文档序号:14914511发布日期:2018-07-11 00:20阅读:134来源:国知局

本申请涉及计算机技术领域,尤其涉及一种消息分发方法、装置及设备。



背景技术:

消息队列(Message Queue)是一种软件工程组件,用于业务系统解耦和异步通信,通过消息队列能够显著提高吞吐量。对于亿万级消息数量的web站点,其众多子系统、子应用都有消费消息的需求,消息队列的应用是非常普遍的。

消息队列通常的组成部分有消息生产者、消息通道、消息消费者,消息生产者实时地顺序地将消息推送到消息通道,消息消费者依据自己的需求接入网络,并可以从消息通道中消费不同类型的全量消息。

然而,消息消费者每次从消息通道中获取业务消息时,是从消息通道中获取不同类型的全量消息,由于每个消息消费者最终需要的业务消息占消息通道中消息总量的比例很小,这样,会造成发送给消息消费者的业务消息的数据量较大,且其中的大部分业务消息对于某一个用户来说是不需要的,因此,造成网络带宽资源的巨大浪费,从而造成不必要的网络拥塞,并产生较大延迟。



技术实现要素:

本申请实施例的目的是提供一种消息分发方法、装置及设备,以解决现有技术中消息分发造成网络带宽资源的问题。

为解决上述技术问题,本申请实施例是这样实现的:

本申请实施例提供的一种消息分发方法,应用于消息队列系统中,所述方法包括:

从所述消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息;

根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者;

将所述待下发的业务消息分发到所述第一消费者对应的第二消息通道中,通过所述第二消息通道发送给所述第一消费者。

可选地,所述待下发的业务消息的业务属性信息包括话题词、关键词、用户标识中的一种或多种,所述消费属性信息包括话题词、关键词、用户标识中的一种或多种。

可选地,所述根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者,包括:

根据所述待下发的业务消息的业务属性信息,确定所述待下发的业务消息所属的业务项目对应的消息筛选类别,所述消息筛选类别包括基于话题词筛选、基于用户标识筛选;

根据确定出的消息筛选类别,将所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息和所述消费属性信息中与所述消息筛选类别相应的信息进行对比,确定所述待下发的业务消息的第一消费者。

可选地,所述根据确定出的消息筛选类别,将所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息和所述消费属性信息中与所述消息筛选类别相应的信息进行对比,确定所述待下发的业务消息的第一消费者,包括:

获取所述待下发的业务消息中与确定出的消息筛选类别相应的业务属性信息的集合;

将获取到的集合作为整体与所述消费属性信息中与确定出的消息筛选类别相应的信息进行交集运算,确定所述待下发的业务消息的第一消费者。

可选地,如果所述消费属性信息中包括关键词,

所述根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者,包括:

根据所述每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,所述关键词的筛选算法包括语言内置算法和基于构建字典树数据结构的算法;

基于确定出的关键词的筛选算法,对所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息进行对比,确定所述待下发的业务消息的第一消费者。

可选地,所述根据所述每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,包括:

如果所述关键词数量小于第一预设阈值,则确定关键词的筛选算法为语言内置算法;

如果所述关键词数量大于第一预设阈值,且小于第二预设阈值,则确定关键词的筛选算法为基于构建字典树数据结构的算法,其中,所述第二预设阈值大于所述第一预设阈值。

可选地,所述方法还包括:

监测所述第一消费者对应的第二消息通道中堆积的业务消息的数量;

如果第一消费者对应的第二消息通道中堆积的业务消息的数量超过预定数量阈值,则确定所述第一消费者异常,并存储堆积的业务消息;

当所述第一消费者恢复正常后,继续向所述第一消费者发送存储的堆积的业务消息。

本申请实施例提供的一种消息分发装置,应用于消息队列系统中,所述装置包括:

消息获取模块,用于从所述消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息;

消费者确定模块,用于根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者;

分发模块,用于将所述待下发的业务消息分发到所述第一消费者对应的第二消息通道中,通过所述第二消息通道发送给所述第一消费者。

可选地,所述待下发的业务消息的业务属性信息包括话题词、关键词、用户标识中的一种或多种,所述消费属性信息包括话题词、关键词、用户标识中的一种或多种。

可选地,所述消费者确定模块,包括:

筛选类别确定单元,用于根据所述待下发的业务消息的业务属性信息,确定所述待下发的业务消息所属的业务项目对应的消息筛选类别,所述消息筛选类别包括基于话题词筛选、基于用户标识筛选;

第一消费者确定单元,用于根据确定出的消息筛选类别,将所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息和所述消费属性信息中与所述消息筛选类别相应的信息进行对比,确定所述待下发的业务消息的第一消费者。

可选地,所述消费者确定单元,用于获取所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息的集合;将获取到的集合作为整体与所述消费属性信息中与所述消息筛选类别相应的信息进行交集运算,确定所述待下发的业务消息的第一消费者。

可选地,如果所述消费属性信息中包括关键词,

所述消费者确定模块,包括:

算法确定单元,用于根据所述每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,所述关键词的筛选算法包括语言内置算法和基于构建字典树数据结构的算法;

第二消费者确定单元,用于基于确定出的关键词的筛选算法,对所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息进行对比,确定所述待下发的业务消息的第一消费者。

可选地,所述算法确定单元,用于如果所述关键词的数量小于第一预设阈值,则确定关键词的筛选算法为语言内置算法;如果所述关键词的数量大于第一预设阈值,且小于第二预设阈值,则确定关键词的筛选算法为基于构建字典树数据结构的算法,其中,所述第二预设阈值大于所述第一预设阈值。

可选地,所述装置还包括:

检测模块,用于监测所述第一消费者对应的第二消息通道中堆积的业务消息的数量;

消息存储模块,用于如果第一消费者对应的第二消息通道中堆积的业务消息的数量超过预定数量阈值,则确定所述第一消费者异常,并存储堆积的业务消息;

发送模块,用于当所述第一消费者恢复正常后,继续向所述第一消费者发送存储的堆积的业务消息。

本申请实施例提供的一种消息分发设备,所述消息分发设备包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

从消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息;

根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者;

将所述待下发的业务消息分发到所述第一消费者对应的第二消息通道中,通过所述第二消息通道发送给所述第一消费者。

由以上本申请实施例提供的技术方案可见,本申请实施例应用于消息队列系统中,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息,并根据待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息,确定待下发的业务消息的第一消费者,最后,将待下发的业务消息分发到第一消费者对应的第二消息通道中,以发送给第一消费者,这样,可以通过从上游消息队列系统中获取待下发的业务消息,并在消息队列系统的下游架设分发组件,以对业务消息的业务属性信息进行细化过滤,为消息消费者筛选出其所需的业务消息,省去从第一消息通道读取全量业务消息的过程,由于很多消息消费者只需要全量业务消息中的极少部分业务消息,消息队列分发的过程中可以避免网络带宽的使用量,提高了网络带宽的利用率,减少消息通道设备的负载,节约成本。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一种消息分发方法实施例;

图2为本申请另一种消息分发方法实施例;

图3为本申请一种消息分发装置实施例;

图4为本申请另一种消息分发设备实施例。

具体实施方式

本申请实施例提供一种消息分发方法、装置及设备。

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

实施例一

如图1所示,本申请实施例提供一种消息分发方法,该方法的执行主体可以为终端设备,该终端设备可以如个人计算机等设备,也可以如手机、平板电脑等移动终端设备,该终端设备可以为用户使用的终端设备。该方法可以用于向用户推荐各种类型的信息(如文章、广告或应用程序等)等处理中。该方法具体可以包括以下步骤:

在步骤S102中,从消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息。

其中,消息队列可以是在业务消息的传输过程中保存业务消息的容器,消息队列的主要目的是提供路由并保证业务消息的传递,如果发送业务消息时接收者不可用(如离线等),消息队列可以保留该业务消息,直到将该业务消息成功传递给该接收者。消息队列系统可以是收集业务消息,并将收集的业务消息设置到消息队列中的系统。业务消息可以是不同网络业务产生的消息,例如用户订阅的微博中的某一个公众号,当该公众号中存在更新的消息时,可以将更新的消息发送给消息队列系统,消息队列系统可以将更新的消息放置在消息队列中。

在实施中,消息队列(Message Queue)是一种软件工程组件,用于业务系统解耦和异步通信,通过消息队列能够显著提高吞吐量。对于亿万级消息数量的web站点,其众多子系统、子应用都有消费消息的需求,消息队列的应用是非常普遍的。消息队列通常的组成部分有消息生产者、消息通道(即第一消息通道)、消息消费者,消息生产者实时地顺序地将消息推送到第一消息通道,消息消费者依据自己的需求接入网络,并可以从第一消息通道中消费不同类型的全量消息。然而,消息消费者每次从第一消息通道中获取业务消息时,是从第一消息通道中获取不同类型的全量消息,由于每个消息消费者最终需要的业务消息占第一消息通道中消息总量的比例很小,这样,会造成发送给消息消费者的业务消息的数据量较大,且其中的大部分业务消息对于某一个用户来说是不需要的,因此,使得资源的浪费,为此,本申请实施例提供一种解决方式,即在消息队列系统的下游架设分发组件,以分发相应的消息给相应的消息消费者,具体可以包括以下内容:

每当消息生产者生产出一条或多条业务消息时,会将生产出的业务消息发送到第一消息通道中,第一消息通道中包括多个待发送给消息消费者的业务消息,而且,多个业务消息在第一消息通道中根据时间的先后顺序排列,业务消息的生成时间距离当前时刻越远,则在第一消息通道中业务消息越靠前,基于上述的排列方式,第一消息通道中形成一个消息队列。由于消息队列中的某一条业务消息通常是发送给指定消息消费者(例如订阅了该业务消息的用户)的,因此,可以在将业务消息发送给消息消费者之前,可以对消息队列中的业务消息进行筛选,确定每一条业务消息对应的消息消费者。当需要向消息消费者发送业务消息时,可以从上游消息队列系统下发业务消息的第一消息通道中批量获取待下发的业务消息。在实际应用中,针对从消息队列系统下发业务消息的第一消息通道中批量获取待下发的业务消息的处理,其中,批量获取待下发的业务消息可以是由预先设置的相应接口来实现,即通过预先设置的接口批量获取待下发的业务消息。

在步骤S104中,根据上述待下发的业务消息的业务属性信息和上述消息队列系统的每个消费者的消费属性信息,确定待下发的业务消息的第一消费者。

其中,业务属性信息可以是业务消息的本质特征或特征等信息,例如,关键词和/或用户标识等,其中的关键词可以是业务消息中能够体现该业务消息主要内容的词语,其中的用户标识可以是用户表征用户身份的相关信息,例如用户的姓名、账号等。消费属性信息可以是与消息消费者相关的本质特征或特征等信息,例如话题词或用户标识,其中的话题词可以是与消息消费者爱好或喜欢的话题相关的词语。本申请实施例中,业务属性信息和消费属性信息对应的消息类型和具体的信息内容可以相同,也可以不同,例如,待下发的业务消息的业务属性信息全部是关键词,或者,待下发的业务消息中一部分业务信息的业务属性信息是关键词,另一部分的业务属性信息为用户标识。再例如,某一个或多个消费者的消费属性信息为话题词,剩余的消费者的消费属性信息为用户标识等。

在实施中,业务消息在下发时,会为该业务消息设置相应的业务属性信息,如关键词和/或用户标识等,此外,每一个消息消费者也可以设置有相应的消费属性信息,例如话题词和/或用户标识等。通过上述步骤S102的处理得到待下发的业务消息后,可以从待下发的每一条业务消息中提取其业务属性信息,然后,可以获取当前处于在线状态的消息消费者,可以从上述消息消费者的相关信息中提取消费属性信息。可以对每一条业务消息进行筛选,可以从批量获取的待下发的业务消息中选取一条业务消息,可以将该业务消息的业务属性信息分别与上述消息消费者的消费属性信息进行对比,如果两者相同,则表明该消息消费者订阅了该业务消息,如果两者不同,则表明该消息消费者没有订阅该业务消息,确定该业务消息对应的消息消费者后,可以再选取下一条业务消息,然后,再对该业务消息的业务属性信息与每一个消息消费者的消费属性信息进行对比,确定该业务消息对应的消息消费者,通过上述方式,可以循环执行上述过程,直到批量获取的待下发的业务消息全部完成上述筛选过程,得到待下发的业务消息的第一消费者。

在步骤S106中,将待下发的业务消息分发到第一消费者对应的第二消息通道中,通过第二消息通道发送给第一消费者。

在实施中,通过上述步骤S104的处理,确定待下发的业务消息的第一消费者后,可以为不同的消息消费者设置相应的消息通道,即可以为第一消费者设置相应的第二消息通道,然后,可以将确定第一消费者的业务消息下发到相应的第二消息通道中,这样,批量获取的每一条待下发的业务消息均可以被分发到相应的消息消费者对应的第二消息通道中,从而可以将相应的业务消息发送给相应的消息消费者。

需要说明的是,将待下发的业务消息分发到第一消费者对应的第二消息通道中的处理,可以由不同的服务器提供第一消费者对应的第二消息通道,例如,MCQ服务器或Redis服务器等,即可以将待下发的业务消息分发到MCQ服务器或Redis服务器中第一消费者对应的第二消息通道中,以通过MCQ服务器或Redis服务器将其发送给第一消费者。

基于上述相关内容,上述第一消息通道为位于消息分发过程中消息分发的上游消息队列系统下发业务消息的通道,在实际应用中也可以将第一消息通道称为上游消息通道,第二消息通道为位于消息分发过程中消息分发的下游下发业务消息给相应的消息消费者的通道,在实际应用中也可以将第二消息通道称为下游消息通道。

本申请实施例提供一种消息分发方法,应用于消息队列系统中,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息,并根据待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息,确定待下发的业务消息的第一消费者,最后,将待下发的业务消息分发到第一消费者对应的第二消息通道中,以发送给第一消费者,这样,可以通过从上游消息队列系统中获取待下发的业务消息,并在消息队列系统的下游架设分发组件,以对业务消息的业务属性信息进行细化过滤,为消息消费者筛选出其所需的业务消息,省去从第一消息通道读取全量业务消息的过程,由于很多消息消费者只需要全量业务消息中的极少部分业务消息,消息队列分发的过程中可以避免网络带宽的使用量,提高了网络带宽的利用率,减少消息通道设备的负载,节约成本。

实施例二

如图2所示,本申请实施例提供一种消息分发方法,该方法可以由终端设备和服务器共同执行,其中,该终端设备可以如个人计算机等设备,也可以如手机、平板电脑等移动终端设备,该终端设备可以为用户使用的终端设备。该服务器可以是独立的服务器,也可以是由多个服务器组成的服务器集群,而且,该服务器可以是某应用程序的后台服务器,也可以是某网站(如购物网站)的后台服务器等。该方法可以用于向用户推荐各种类型的信息(如文章、广告或应用程序等)等处理中。该方法具体可以包括以下步骤:

在步骤S202中,从消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息。

在实施中,可以先对消息队列系统进行系统初始化,此时,消息队列系统可以将每一项业务中各个项目设置的筛选条件进行初始化,然后,可以从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息,其中,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息的处理与上述实施例一中步骤S102的步骤内容相同,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息的具体处理过程可以参见上述步骤S102的相关内容,在此不再赘述。

考虑到业务消息的业务属性信息可以包括多种不同类别的属性,例如话题词、用户标识和关键词等,对于不同的业务属性信息可以包括不同的处理方式,而且,每一种业务属性信息还可以包括多种不同的实现方式,以下针对不同的业务属性信息分别提供一种可选的处理方式,具体可以包括以下步骤S204和步骤S206,或步骤S208和步骤S210。

在步骤S204中,根据待下发的业务消息的业务属性信息,确定待下发的业务消息所属的业务项目对应的消息筛选类别。

其中,该消息筛选类别包括基于话题词筛选、基于用户标识筛选。其中的话题词可以是与消息消费者爱好或喜欢的话题相关的词语,用户标识可以是用户表征用户身份的相关信息,例如用户的姓名、账号等。

在实施中,消息生产者生产一条业务消息时,会为该业务消息设置相应的业务属性信息,例如,如果某业务消息所属的业务项目对应的消息筛选类别为基于话题词筛选,则该业务消息的业务属性信息中会设置有表征该业务数据需要通过话题词筛选的方式进行消息筛选的信息,例如该业务属性信息中可以包括基于话题词筛选,以及相应的一个或多个话题词,这样,当获取到该业务消息时,可以从该业务消息中获取到该业务消息可以通过话题词的方式筛选。如果待下发的业务消息中包括多个业务消息,且其中有多个业务消息都属于基于话题词筛选的消息筛选类别,对于此种情况,可以通过其中包括的具体的话题词的不同而加以区分,例如,业务消息1的业务属性信息可以包括基于话题词筛选,其中的话题词可以包括话题词A、话题词B和话题词C,业务消息2的业务属性信息可以包括基于话题词筛选,其中的话题词可以包括话题词A、话题词D和话题词C,可见,两条业务消息都属于基于话题词筛选,两者包含的话题词中大部分为相同的话题词,此时,可以通过两者存在不同的话题词(即话题词B和话题词D)来区分两者。

在进行消息筛选之前,为了提高消息的筛选效率,可以先对待下发的业务消息进行预处理,具体地,可以获取每一个待下发的业务消息,可以从每一个业务消息中提取其对应的业务属性信息,可以将得到的业务属性信息汇总到一起,可以以表格的形式存储该业务属性信息,其中,不同的业务属性信息可以对应相应的业务项目的标识。本申请实施例中,考虑到话题词和用户标识是消息筛选中的重要信息,可以针对话题词和用户标识,对业务消息进行预处理,即可以从每一个待下发的业务消息中提取话题词,可以将提取的话题词与相应的业务项目的标识对应存储,然后,还可以获取全部的消息消费者的用户标识。可以获取待下发的业务消息所属的业务项目是否包括基于话题词筛选的业务项目,如果包括,则可以批量判断上述提取的全部话题词中是否存在与某项目相关的业务消息,如果存在,则可以进行话题词筛选,如果不存在,则可以进行其它业务属性信息的筛选。如果待下发的业务消息所属的业务项目不包括基于话题词筛选的业务项目,则可以进行其它业务属性信息的筛选。

另外,还可以从每一个待下发的业务消息中提取用户标识,可以将提取的用户标识与相应的业务项目的标识对应存储,然后,还可以获取全部的消息消费者的用户标识。可以获取待下发的业务消息所属的业务项目是否包括基于用户标识筛选的业务项目,如果包括,则可以批量判断上述提取的全部用户标识中是否存在与某项目相关的用户标识,如果存在,则可以进行用户标识筛选,如果不存在,则可以进行其它业务属性信息的筛选。如果待下发的业务消息所属的业务项目不包括基于用户标识筛选的业务项目,则可以进行其它业务属性信息的筛选。

在步骤S206中,根据确定出的消息筛选类别,将待下发的业务消息中与该消息筛选类别相应的业务属性信息和上述消费属性信息中与该消息筛选类别相应的信息进行对比,确定待下发的业务消息的第一消费者。

在实施中,如果上述消息筛选类别为基于话题词筛选,则可以将待下发的业务消息中与基于话题词筛选相应的业务属性信息和上述消费属性信息中与基于话题词筛选相应的信息进行对比,即可以将待下发的业务消息中的话题词相关的业务属性信息与消费属性信息中的话题词相关的消费属性信息进行对比,例如,待下发的业务消息中的话题词相关的业务属性信息包括多个话题词,可以分别为话题词AA、话题词BB和话题词CC,消息消费者1对应的话题词可以分别为话题词KK、话题词MM和话题词NN,消息消费者2对应的话题词可以分别为话题词AA、话题词MM和话题词PP,消息消费者3对应的话题词可以分别为话题词AA、话题词BB和话题词CC,则将上述待下发的业务消息的话题词分别与消息消费者1、消息消费者2和消息消费者3对应的话题词进行对比,得到待下发的业务消息的话题词与消息消费者3对应的话题词相同,则可以确定待下发的业务消息的第一消费者为消息消费者3。

上述步骤S206的具体处理方式可以多种多样,以下提供一种可选的处理方式,具体可以包括以下步骤一和步骤二。

步骤一,获取待下发的业务消息中与消息筛选类别相应的业务属性信息的集合。

在实施中,首先可以不对基于话题词和用户标识筛选的业务消息的数量做任何假设,可以将所有的业务属性信息存储到数据库(如NoSQL数据库)中,并计算该业务属性信息的Hash值。可以利用内存型数据库的优势和Hash值进行业务属性信息的查找。

基于用户标识的筛选逻辑可以是通过业务消息的用户标识去查询数据库,假设M个消息消费者,批量筛选N条业务消息,每条业务消息中包含有1个用户标识,这样,基于用户标识的筛选要进行m*n*1次查询,每次查询额外成本是RTT(Round Trip Time,往返时间),则往返耗时为M*N*1*RTT。为了减少查询成本,可以取N条业务消息的用户标识组成合集,得到待下发的业务消息中与消息筛选类别相应的业务属性信息的集合。

步骤二,将获取到的集合作为整体与消费属性信息中与消息筛选类别相应的信息进行交集运算,确定待下发的业务消息的第一消费者。

在实施中,对于基于用户标识的筛选,本申请实施例对此进行了优化,即取N条业务消息的用户标识组成的合集n与数据库中M个消息消费者的筛选集p1,p2,…,pM依次进行交集运算,即n∩p1n∩p2…n∩pM。可以利用数据库管道执行m条命令,这样,仅使用一次RTT,就分别得出了这批消息需要筛选的用户标识的集合Ek=min(n,pk),其中k=1…M,同时,此处理方式无内存溢出的风险。

进一步确定待下发的业务消息的第一消费者的处理可以参见上述步骤S206中的相关内容,在此不再赘述。

对于消费属性信息为关键词的情况,可以包括多种不同的处理方式,以下提供一种可选的处理方式,具体可以包括以下步骤S208和步骤S210。

在步骤S208中,根据每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,该关键词的筛选算法包括语言内置算法和基于构建字典树数据结构的算法,该消费属性信息中包括关键词。

在实施中,考虑到消费属性信息中包含的关键词的数量不同,基于关键词筛选时,其筛选过程的复杂度可能不同,即关键词越多,进行基于关键词的筛选时需要进行关键词比对的次数越多,这样会降低消息分发效率,为此,可以根据关键词数量的不同,分别设置不同的关键词筛选算法,具体地,可以预先设置多个不同的关键词的筛选算法,例如语言内置算法和基于构建字典树数据结构的算法等,关键词的筛选算法的选取可以根据实际情况设定。可以针对不同的关键词的筛选算法设定不同的关键词的数量阈值,从而可以根据每个消费者的消费属性信息中包含的关键词数量与上述设定的关键词的数量阈值之间的关系,确定需要使用的关键词的筛选算法。

针对该关键词的筛选算法中包括语言内置算法和基于构建字典树数据结构的算法的情况,则上述步骤S208的具体处理方式可以包括以下步骤一和步骤二。

步骤一,如果上述关键词的数量小于第一预设阈值,则确定关键词的筛选算法为语言内置算法。

其中,第一预设阈值可以根据实际情况设定,具体如200或300等。语言内置算法可以是基于语言文字之间的匹配关系的算法,即可以是文字之间逐一对比,也可以是多个对比等。

在实施中,考虑到消息消费者的消费属性信息中只包含较少的关键词,可以直接使用语言内置算法循环判断关键词是否匹配,例如,关键词包括新闻和社会,则可以关键词“新闻”中的“新”分别与业务消息中的业务属性信息中的每一个字符进行匹配,判断两者是否相同,如果相同,则再判断关键词“新闻”中的“闻”是否匹配,如果匹配,则再对关键词“社会”进行如上述方式的匹配对比,如果不匹配,则可以判定该业务消息与该消息消费者不匹配。

步骤二,如果上述关键词的数量大于第一预设阈值,且小于第二预设阈值,则确定关键词的筛选算法为基于构建字典树数据结构的算法,其中,第二预设阈值大于第一预设阈值。

其中,第二预设阈值可以根据实际情况设定,具体如1000或1500等。基于构建字典树数据结构的算法可以是基于构建的字典树数据结构的进行关键词匹配的算法。字典树又可称作Trie树,其效率较高,可以用于统计和排序大量的字符串,其优点是,最大限度地减少无谓的字符串比较,字典树可以利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的,字典树的基本性质可以包括:根节点不包含字符,除根节点以外,每个节点只包含一个字符;从根节点到某一个节点,路径上经过的字符连接起来,就是该节点对应的字符串;每个节点的所有子节点包含的字符串不相同。

在实施中,为了减低信息的筛选时间,提高关键词的匹配效率,如果判定得到的关键词的数量大于第一预设阈值,且小于第二预设阈值,则可以选择使用基于构建字典树数据结构的算法进行关键词筛选。此外,如果得到的关键词的数量大于第二预设阈值,则可以通过上述哈希值的方式进行关键词筛选。

在步骤S210中,基于确定出的关键词的筛选算法,对待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息进行对比,确定待下发的业务消息的第一消费者。

在实施中,如果确定出的关键词数量小于第一预设阈值,则采用语言内置算法对待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息进行对比,确定待下发的业务消息的第一消费者;如果确定出的关键词数量大于第一预设阈值,且小于第二预设阈值,则采用基于构建字典树数据结构的算法对待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息进行对比,确定待下发的业务消息的第一消费者;如果确定出的关键词数量大于第二预设阈值,则采用哈希值的方式对待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息进行对比,确定待下发的业务消息的第一消费者。

此外,还可以对经筛选而下发了业务消息的第二消息通道进行监控,当其中的业务消息堆积达一定量时,可以报警,具体可以参见下述步骤S212和步骤S214。

在步骤S212中,监测第一消费者对应的第二消息通道中堆积的业务消息的数量。

在步骤S214中,如果第一消费者对应的第二消息通道中堆积的业务消息的数量超过预定数量阈值,则确定第一消费者异常,并存储堆积的业务消息。

其中,预定数量阈值可以根据实际情况设定,具体如10万或15万等。

在步骤S216中,当第一消费者恢复正常后,继续向第一消费者发送存储的堆积的业务消息。

在实施中,例如,堆积数量达到10万条业务消息时,可以认为对应的消息消费者异常,此时,可以采取业务消息落地持久化策略,将该业务消息转存到关系型数据库中,以备消息消费者恢复正常状况时,继续进行消费。

本申请实施例提供一种消息分发方法,应用于消息队列系统中,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息,并根据待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息,确定待下发的业务消息的第一消费者,最后,将待下发的业务消息分发到第一消费者对应的第二消息通道中,以发送给第一消费者,这样,可以通过从上游消息队列系统中获取待下发的业务消息,并在消息队列系统的下游架设分发组件,以对业务消息的业务属性信息进行细化过滤,为消息消费者筛选出其所需的业务消息,省去从第一消息通道读取全量业务消息的过程,由于很多消息消费者只需要全量业务消息中的极少部分业务消息,消息队列分发的过程中可以避免网络带宽的使用量,提高了网络带宽的利用率,减少消息通道设备的负载,节约成本。

实施例三

以上为本申请实施例提供的消息分发方法,基于同样的思路,本申请实施例还提供一种消息分发装置,如图3所示。

该消息分发装置应用于消息队列系统中,所述装置包括:消息获取模块301、消费者确定模块302和分发模块303,其中:

消息获取模块301,用于从所述消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息;

消费者确定模块302,用于根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者;

分发模块303,用于将所述待下发的业务消息分发到所述第一消费者对应的第二消息通道中,通过所述第二消息通道发送给所述第一消费者。

本申请实施例中,所述待下发的业务消息的业务属性信息包括话题词、关键词、用户标识中的一种或多种,所述消费属性信息包括话题词、关键词、用户标识中的一种或多种。

本申请实施例中,所述消费者确定模块302,包括:

筛选类别确定单元,用于根据所述待下发的业务消息的业务属性信息,确定所述待下发的业务消息所属的业务项目对应的消息筛选类别,所述消息筛选类别包括基于话题词筛选、基于用户标识筛选;

第一消费者确定单元,用于根据确定出的消息筛选类别,将所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息和所述消费属性信息中与所述消息筛选类别相应的信息进行对比,确定所述待下发的业务消息的第一消费者。

本申请实施例中,所述消费者确定单元,用于获取所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息的集合;将获取到的集合作为整体与所述消费属性信息中与所述消息筛选类别相应的信息进行交集运算,确定所述待下发的业务消息的第一消费者。

本申请实施例中,如果所述消费属性信息中包括关键词,

所述消费者确定模块302,包括:

算法确定单元,用于根据所述每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,所述关键词的筛选算法包括语言内置算法和基于构建字典树数据结构的算法;

第二消费者确定单元,用于基于确定出的关键词的筛选算法,对所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息进行对比,确定所述待下发的业务消息的第一消费者。

本申请实施例中,所述算法确定单元,用于如果所述关键词的数量小于第一预设阈值,则确定关键词的筛选算法为语言内置算法;如果所述关键词的数量大于第一预设阈值,且小于第二预设阈值,则确定关键词的筛选算法为基于构建字典树数据结构的算法,其中,所述第二预设阈值大于所述第一预设阈值。

本申请实施例中,所述装置还包括:

检测模块,用于监测所述第一消费者对应的第二消息通道中堆积的业务消息的数量;

消息存储模块,用于如果第一消费者对应的第二消息通道中堆积的业务消息的数量超过预定数量阈值,则确定所述第一消费者异常,并存储堆积的业务消息;

发送模块,用于当所述第一消费者恢复正常后,继续向所述第一消费者发送存储的堆积的业务消息。

本申请实施例提供一种消息分发装置,应用于消息队列系统中,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息,并根据待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息,确定待下发的业务消息的第一消费者,最后,将待下发的业务消息分发到第一消费者对应的第二消息通道中,以发送给第一消费者,这样,可以通过从上游消息队列系统中获取待下发的业务消息,并在消息队列系统的下游架设分发组件,以对业务消息的业务属性信息进行细化过滤,为消息消费者筛选出其所需的业务消息,省去从第一消息通道读取全量业务消息的过程,由于很多消息消费者只需要全量业务消息中的极少部分业务消息,消息队列分发的过程中可以避免网络带宽的使用量,提高了网络带宽的利用率,减少消息通道设备的负载,节约成本。

实施例四

以上为本申请实施例提供的消息分发装置,基于同样的思路,本申请实施例还提供一种消息分发设备,如图4所示。

所述消息分发设备可以为上述实施例提供的终端设备。

消息分发设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器401和存储器402,存储器402中可以存储有一个或一个以上存储应用程序或数据。其中,存储器402可以是短暂存储或持久存储。存储在存储器402的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对消息分发设备中的一系列计算机可执行指令。更进一步地,处理器401可以设置为与存储器402通信,在消息分发设备上执行存储器402中的一系列计算机可执行指令。消息分发设备还可以包括一个或一个以上电源403,一个或一个以上有线或无线网络接口404,一个或一个以上输入输出接口405,一个或一个以上键盘406。

具体在本实施例中,消息分发设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对消息分发设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:

应用于消息队列系统中,包括:

从所述消息队列系统用于下发业务消息的第一消息通道中获取待下发的业务消息;

根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者;

将所述待下发的业务消息分发到所述第一消费者对应的第二消息通道中,通过所述第二消息通道发送给所述第一消费者。

可选地,所述待下发的业务消息的业务属性信息包括话题词、关键词、用户标识中的一种或多种,所述消费属性信息包括话题词、关键词、用户标识中的一种或多种。

可选地,所述根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者,包括:

根据所述待下发的业务消息的业务属性信息,确定所述待下发的业务消息所属的业务项目对应的消息筛选类别,所述消息筛选类别包括基于话题词筛选、基于用户标识筛选;

根据确定出的消息筛选类别,将所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息和所述消费属性信息中与所述消息筛选类别相应的信息进行对比,确定所述待下发的业务消息的第一消费者。

可选地,所述根据确定出的消息筛选类别,将所述待下发的业务消息中与所述消息筛选类别相应的业务属性信息和所述消费属性信息中与所述消息筛选类别相应的信息进行对比,确定所述待下发的业务消息的第一消费者,包括:

获取所述待下发的业务消息中与确定出的消息筛选类别相应的业务属性信息的集合;

将获取到的集合作为整体与所述消费属性信息中与确定出的消息筛选类别相应的信息进行交集运算,确定所述待下发的业务消息的第一消费者。

可选地,如果所述消费属性信息中包括关键词,

所述根据所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息,确定所述待下发的业务消息的第一消费者,包括:

根据所述每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,所述关键词的筛选算法包括语言内置算法和基于构建字典树数据结构的算法;

基于确定出的关键词的筛选算法,对所述待下发的业务消息的业务属性信息和所述消息队列系统的每个消费者的消费属性信息进行对比,确定所述待下发的业务消息的第一消费者。

可选地,所述根据所述每个消费者的消费属性信息中包含的关键词数量,确定关键词的筛选算法,包括:

如果所述关键词数量小于第一预设阈值,则确定关键词的筛选算法为语言内置算法;

如果所述关键词数量大于第一预设阈值,且小于第二预设阈值,则确定关键词的筛选算法为基于构建字典树数据结构的算法,其中,所述第二预设阈值大于所述第一预设阈值。

可选地,所述方法还包括:

监测所述第一消费者对应的第二消息通道中堆积的业务消息的数量;

如果第一消费者对应的第二消息通道中堆积的业务消息的数量超过预定数量阈值,则确定所述第一消费者异常,并存储堆积的业务消息;

当所述第一消费者恢复正常后,继续向所述第一消费者发送存储的堆积的业务消息。

本申请实施例提供一种消息分发设备,应用于消息队列系统中,从消息队列系统下发业务消息的第一消息通道中获取待下发的业务消息,并根据待下发的业务消息的业务属性信息和消息队列系统的每个消费者的消费属性信息,确定待下发的业务消息的第一消费者,最后,将待下发的业务消息分发到第一消费者对应的第二消息通道中,以发送给第一消费者,这样,可以通过从上游消息队列系统中获取待下发的业务消息,并在消息队列系统的下游架设分发组件,以对业务消息的业务属性信息进行细化过滤,为消息消费者筛选出其所需的业务消息,省去从第一消息通道读取全量业务消息的过程,由于很多消息消费者只需要全量业务消息中的极少部分业务消息,消息队列分发的过程中可以避免网络带宽的使用量,提高了网络带宽的利用率,减少消息通道设备的负载,节约成本。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware Description Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。

控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书一个或多个实施例时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本说明书的实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本说明书的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1