《一种增加消息队列模型的发布/订阅系统及其工作方法.pdf》由会员分享,可在线阅读,更多相关《一种增加消息队列模型的发布/订阅系统及其工作方法.pdf(24页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104092767A43申请公布日20141008CN104092767A21申请号201410346381922申请日20140721H04L29/0820060171申请人北京邮电大学地址100876北京市海淀区西土城路10号72发明人崔毅东雷友珣黄瑞情漆涛赵晖谢轶杨振崧金跃辉陈莉萍74专利代理机构北京德琦知识产权代理有限公司11018代理人夏宪富54发明名称一种增加消息队列模型的发布/订阅系统及其工作方法57摘要一种增加消息队列模型的发布/订阅系统及其工作方法,该系统包括分布式消息中间件服务端集群、客户端集群和分布式协调服务器集群,其中消息中间件服务端集群中的服务节点仍。
2、由原发布/订阅系统相应模块组成,且其功能与信息传递关系相同;客户端同时设有发布/订阅和消息队列两种模型的调用接口,以供用户在使用消息中间件时,能够不更换底层消息中间件就直接选择使用两种不同消息传递模型,故该客户端在原架构基础上又增设协调服务模块和消息处理模块。本发明系统同时支持发布/订阅和消息队列两种消息传递模型,且同时保证两种模型的可用性、伸缩性和其他性能都在可接受范围内,较好地解决了用户变换底层消息传递模型比较困难的问题。51INTCL权利要求书4页说明书15页附图4页19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书15页附图4页10申请公布号CN104092767AC。
3、N104092767A1/4页21一种增加消息队列模型的发布/订阅系统,包括由多个服务节点组成的分布式消息中间件服务端集群和由众多终端组成的客户端集群,所述分布式消息中间件服务端集群中的服务节点仍然由原发布/订阅系统的相应模块所组成,且各模块功能与信息传递关系保持不变;其特征在于所述系统还增设有分布式协调服务器集群,由该分布式协调服务器集群提供的分布式协调服务对该系统中的客户端集群进行协调管理;且该系统是在基于主题的发布/订阅系统中增添消息队列模型而构成的,其中的客户端同时设有发布/订阅模型和消息队列模型的两种调用接口,以供用户在使用消息中间件时,能够不更换底层消息中间件就调用两种不同接口,直。
4、接选择使用发布/订阅或消息队列两种不同的消息传递模型;故该系统客户端既是发布/订阅模型中消息的发布者和订阅者负责向服务端中设定主题发送消息和接收来自服务端中已订阅主题的新消息;又是消息队列模型中队列消息的生产者和消费者负责向服务端中设定队列发送消息和接收来自服务端中已绑定队列的新消息;该客户端设有下述六个功能模块数据通信模块,作为客户端的最底层模块,负责接收所有来自服务端的处理响应或消息数据,并传送给响应处理模块;同时将所有来自客户端的请求或消息数据发送至网络,以供传送给服务端;响应处理模块,负责处理来自数据通信模块的、包括服务端对客户端发布请求和订阅请求的处理响应、即处理成功或失败,以及服务。
5、端发送给订阅者或消费者的主题或队列消息,并传送给相应模块若是请求的处理响应,则传送给发布/订阅接口模块;若是主题或队列的消息,则传送给消息处理模块;发布/订阅接口模块,用作用户发布消息和订阅主题的交互接口,将发布请求和订阅请求经由数据通信模块传送到服务端;设有消息发布者和消息订阅者两个接口单元消息发布者接口单元用于将消息发布到设定主题,并生成发布请求,消息订阅者接口单元用于订阅用户感兴趣的主题消息,并生成订阅请求;消息队列接口模块,用作用户发送和接收队列消息的交互接口,将发送请求和接收请求经由发布/订阅接口模块传递到数据通信模块,再传送到服务端;设有队列生产者和队列消费者两个接口单元队列生产者。
6、接口单元用于发送消息到设定队列,并生成发送请求和调用发布/订阅接口模块的发布者单元,将发送请求封装成发布请求后,传递给数据通信模块;队列消费者接口单元负责绑定用户要求消费的队列,并生成接收请求和调用发布/订阅接口模块的订阅者单元,将接收请求封装成订阅请求传递给数据通信模块协调服务模块,设有锁管理单元和队列指针单元,其中的锁管理单元负责为用户绑定的每个队列维护其队列锁,队列指针单元负责为用户绑定的每个队列维护其队列指针;且该队列锁和队列指针将根据消息处理模块的消息消费单元传递来的信息进行及时更新;消息处理模块,负责接收与消费来自服务端的主题或队列的消息,并对已消费消息向服务端返回确认信号;设有三。
7、个功能单元消息缓存单元负责将响应处理模块发送来的主题或队列消息进行缓存,直到该消息被消费时被取出;消息确认单元负责对已消费的主题或队列消息向服务端返回确认信号;消息消费单元负责消息的消费管理在发布/订阅模型中,用户消费时从消息缓存单元直接提取主题消息;而在消息队列模型中,用户消费每条消息时,需要先从协调服务模块权利要求书CN104092767A2/4页3的锁管理单元获取队列锁,再从队列指针单元获取队列指针后,才能从消息缓存单元中提取该条队列消息;且在每条队列消息被消费结束后,负责将队列锁释放给锁管理单元和更新队列指针单元中的队列指针。2根据权利要求1所述的系统,其特征在于所述分布式消息中间件服。
8、务端集群,作为该系统的控制中心,既负责接收发布/订阅模型中的消息发布者发送来的消息,并将该消息存储到对应的主题,以及将已订阅主题的新消息发送给消息订阅者;也负责接收消息队列模型中的消息生产者发送来的消息,并将该消息存储于设定队列,以及将已绑定队列的新消息发送给消息消费者;设有下述七个功能模块数据通信模块,作为服务端的最底层模块,负责接收所有来自客户端的数据,并传送给请求处理模块,同时将所有来自其他模块的数据发送到网络,再传送给客户端;请求处理模块,负责处理来自数据通信模块的所有数据,包括客户端的发布请求、订阅请求及其对已消费消息的确认信号,并传送给相应模块若是消息发布请求,则告知主题管理模块更。
9、新相关主题信息,再将该请求中的消息数据发送给消息存储模块;若是订阅请求,则告知订阅管理模块更新相关订阅者的信息;若是确认信号,则将该信号分别传递给消息传递模块和订阅管理模块;主题管理模块,负责管理系统中所有主题的相关信息包括系统拥有的主题数量、每个主题的存储位置、当前消息数量及其当前的订阅者信息;订阅管理模块,负责管理系统中所有主题订阅者的相关信息包括订阅者已订阅的主题信息,以及每个主题订阅者对各自已订阅主题的消费信息;消息存储模块,负责在接收到来自请求处理模块的消息后,将每个主题新发布消息先送到消息缓存区进行缓存,同时将该新发布消息送到消息持久层单元进行持久化存储;消息传递模块,负责将主题消。
10、息传递给对应的订阅者先从订阅管理模块和主题管理模块获取订阅者信息及其所订阅的主题信息后,再从消息存储模块拿取需要传递的主题消息,最后经由数据通信模块将该主题消息发送给客户端。3根据权利要求1所述的系统,其特征在于所述由多个服务节点组成的分布式消息中间件服务端集群、分布式协调服务器集群和由众多终端组成的客户端集群共三个集群内都包括数量不等的多个节点,且这三个集群共同部署在相同节点上,或分别部署在不同节点上。4根据权利要求1所述的系统,其特征在于所述分布式协调服务器集群采用包括APACHEZOOKEEPER系统的分布式协调服务器构成,其提供的分布式协调服务负责维护每个队列的全局消费指针、即队列指针。
11、及其队列锁每个队列的所有消费者在从本地缓存提取每条队列消息进行消费前,必须先从分布式协调服务中获取该队列锁;若未获取到该队列锁,则等待;若获取到该队列锁,则读取分布式协调服务中队列的全局消费指针,获悉下一条应该被消费的消息序号后,才能够从本地缓存中提取对应序号的队列消息,然后更新全局消费队列指针将其数值加1;最后释放该队列锁,即将该队列锁返回给分布式协调服务,以供其他消费者使用。5根据权利要求1所述的系统,其特征在于所述消息队列是计算机科学中的一种进程间通信或同一进程的不同线程之间的通信方式,消息队列模型使用异步通信协议,以使通信参与者在空间和时间上解耦队列消息的生产者和消费者无需直接通信,队。
12、列消息被权利要求书CN104092767A3/4页4发送到一个队列进行保存,直到消费者从该队列中读取该消息;且在消息队列模型中,每条消息只能够被一个消费者消费、即读取和使用之,也就是每条消息只能够被消费一次。6一种采用权利要求1所述的增加消息队列模型的发布/订阅系统的工作方法,其特征在于所述工作方法分别包括消息队列模型中的队列消息生产和消费过程,以及发布/订阅模型中的主题消息发布和订阅过程;且因消息队列模型中的队列消息生产过程和发布/订阅模型中的主题消息发布过程的操作步骤相同,故消息队列模型中的队列生产者发送队列消息的操作就复用了发布/订阅模型中的主题消息发布过程将该系统中向某个队列发送消息直。
13、接视为向某个主题发布消息,每条消息是按照时间顺序逐条发送到指定队列;消息队列模型的队列消息生产过程包括下述操作步骤步骤1,客户端的队列生产者发出发送消息请求客户端的消息队列接口模块中的队列生产者单元发起消息发送过程,将要发送的队列消息传递给发布/订阅接口模块的消息发布者单元,消息发布者单元将该发送请求封装成发布请求后,经由数据通信模块发送至网络,再传送至系统服务端;步骤2,服务端接收和处理客户端的发布请求并返回响应服务端的数据通信模块接收到发布请求后,直接将其传递给请求处理模块;请求处理模块成功解析发布请求后,先通过数据通信模块向客户端返回发布成功响应,告诉客户端已成功接收该队列消息;同时通知。
14、主题管理模块更新该队列消息所属队列的相关信息,并将发布请求中的消息数据传递给存储管理模块进行存储;步骤3,服务端对新队列消息进行存储存储管理模块接收到该队列消息后,先将该队列消息传递至消息缓存区单元进行缓存,同时将其传递至消息持久化层单元,以便将该队列消息持久化存储于数据库中;步骤4,客户端接收和处理返回的响应客户端的数据通信模块接收到服务端发来的发布成功响应后,直接上传给响应处理模块;响应处理模块成功解析后,通知发布/订阅接口模块的消息发布者单元发布成功。7根据权利要求6所述的工作方法,其特征在于因为根据消息队列的语义,队列消费者在接收消息时,需先发出与要消费的队列相连接的接收请求,以便将队。
15、列消费者和该要消费的队列消息进行一一绑定;而所述系统中的消息队列模型是基于发布/订阅系统实现的,队列是用主题模拟的,故绑定队列消费者及其消费队列的实质是绑定消息订阅者和主题,并采用订阅操作实现之;因此,所述系统的消息队列模型中,队列消费者在发出接收请求时,实际上是执行绑定队列消费者及其消费的队列消息的订阅操作。8根据权利要求7所述的工作方法,其特征在于所述消息队列模型中队列消息的消费过程包括下述操作步骤步骤A,客户端的队列消息消费者发出接收消息请求客户端的消息队列接口模块中的队列消费者单元发出接收请求,将其传递给发布/订阅接口模块的消息订阅者单元,消息订阅者单元将该接收请求封装成一个订阅请求,。
16、经由数据通信模块发送至网络,再传送至系统服务端;步骤B,服务端接收和处理客户端的订阅请求并返回响应服务端的数据通信模块接收到订阅请求后,直接传递给请求处理模块;请求处理模块成功解析订阅请求后,先从主题管理模块中获取消费队列、其实质为主题的相关信息,并通过数据通信模块向客户端返回权利要求书CN104092767A4/4页5订阅成功响应;再通知订阅管理模块更新相关订阅信息,以实现队列消费者与其消费队列的绑定;最后通知消息传递模块准备发送队列消息给队列消费者;步骤C,服务端开始发送消息过程在发送队列消息前,消息传递模块先分别从主题管理模块和订阅管理模块获取消费队列和队列消费者的相关信息,并根据这些信。
17、息告知消息存储模块需要提取的队列消息;消息存储模块先从消息缓存区查找相关信息,如果没有找到,再去消息持久化层查找;并在成功找到后,将该队列消息返回给消息传递模块;由消息传递模块直接将该队列消息经由数据通信模块发送至网络,再传送至客户端;步骤D,客户端接收和处理来自服务端的消息客户端的数据通信模块将接收到的订阅成功响应或队列消息直接传递给响应处理模块,响应处理模块若接收到订阅成功响应,则通知发布/订阅接口模块中的队列订阅者单元订阅成功;若接收到服务端发来的队列消息,则将该队列消息传递给消息处理模块;消息处理模块将该队列消息放入消息缓存单元,等到消费者消费队列消息时再取出;步骤E,队列消费者开始消。
18、费队列消息,并返回确认信号步骤F,服务端接收并处理确认信号服务端的数据通信模块接收到消息确认信号后,直接传递给请求处理模块;请求处理模块成功解析后,通知订阅管理模块更新相关信息,并将确认信号传递给消息发送模块告知哪些消息已被成功消费。9根据权利要求8所述的工作方法,其特征在于所述步骤E包括下列操作内容E1队列消费者消费每条队列消息时,先调用消息处理模块中的消息消费单元,让其从协调服务模块的锁管理单元尝试获取队列锁;若此时队列锁被其他消费者占有,则处于等待;直到成功获取到该队列锁后,执行步骤E2;E2消息消费单元从协调服务模块的队列指针单元获取相应的队列指针,根据队列指针确定当前应该消费哪条队列。
19、消息后,再从消息缓存单元提取该条队列消息;E3消息消费单元每次从消息缓存单元提取完一条队列消息,就释放该队列锁、将其返回给锁管理单元,并更新队列指针单元中的队列指针值,同时向消息确认单元返回已消费队列消息的确认信号;E4消息确认单元通过数据通信模块向服务端返回已消费队列消息的确认信号,告知服务端哪条队列消息已被成功消费。权利要求书CN104092767A1/15页6一种增加消息队列模型的发布/订阅系统及其工作方法技术领域0001本发明涉及一种分布式消息中间件中增加消息传递模型的技术方案,确切地说,涉及一种增加消息队列模型的发布/订阅系统及其工作方法,属于消息处理和分布式的消息中间件的技术领域。。
20、背景技术0002首先介绍本发明涉及的相关术语0003分布式计算近年提出的一种新的计算方式,简单来讲,就是将原本由一台计算机解决的问题分配给多台计算机共同完成。具体实现方式是将一个需要大量计算的任务分成许多子任务,然后把这些子任务分配给许多计算机分别处理,最后综合所有子任务的处理结果而得到最终结果。这些计算机可以分布在不同的地理位置,它们通过计算机网络互相通信,实现信息和资源的共享。0004消息中间件一种软件或硬件的基础设施,用来支持分布式系统中消息传送。消息中间件充当着“代理人”的角色,消息生产者和接收者无需直接交互而只是与“代理人”消息中间件进行通信,从而实现消息生产者和接收者在空间和时间上。
21、的解耦。消息中间件利用高效可靠的消息传递机制执行与平台无关的数据交流,通过提供不同的消息传递模型来扩展分布式系统中进程间的通信。0005消息传递模型作为一种面向网络的通信架构模型,消息传递模型用于描述在消息传递系统中两个不同部件相互间如何连接和通信。消息传递模型有多种,早期有MESSAGEPASSING、RPC和NOTICATIONS,现在比较主流的是两种消息队列MESSAGEQUEUEING和发布/订阅PUB/SUB。0006消息队列模型在计算机科学中,消息队列是一种进程间通信或同一进程的不同线程间的通信方式。消息队列模型提供了异步的通信协议,可以使通信参与者在空间和时间上解耦。消息的生产者。
22、和消费者无需直接通信,消息被发送到一个队列进行保存,直到消费者从这个队列中取走消息。在消息队列模型中,每一条消息只会被一个消费者消费,即一条消息有且只被消费一次。0007发布/订阅模型其与消息队列模型有很多相似之处,它也能使得通信参与者在空间、时间完全解耦。在发布/订阅模型中,发布者消息生产者不会将消息直接发送给特定的订阅者消息接收者,而只需将消息发送到消息中间件,其余的消息传送工作全部交给消息中间件完成。订阅者只需要向消息中间件发出一个订阅条件,然后,消息中间件就会将所有满足该订阅条件的新发布消息传递给订阅者。在消息消费层次上,发布/订阅模型与消息队列模型的最大不同在于一条消息可能会被多个订。
23、阅者消费,即一条消息可以被消费任意次。0008发布/订阅系统主要有两种基于主题和基于内容。在基于主题的发布/订阅系统中,消息被归类为一个个主题类似“组”的概念。发布者在发送消息时会指定发送到哪一个主题,订阅者在发出订阅条件时也需要指定订阅哪些主题。另外,订阅者在订阅成功说明书CN104092767A2/15页7后,将接收到其订阅主题下所有新发布的消息。0009推模式与拉模式发布/订阅系统中将新消息通知订阅者的方式有两种推模式和拉模式。在推模式系统中,当有新消息产生时,系统会主动将新消息实时推送给对应的订阅者。这些新消息会实时地发送到订阅者处以某种形式缓存起来,以便订阅者在将来某个时间从缓存中获。
24、取这些消息。在拉模式系统中,当有新消息产生时,系统不会主动将新消息推送给订阅者,而是由订阅者自己向系统发出请求来拉取新消息。0010消费者集群在消息队列模型中,每个队列可以有单个消费者,也可以有多个消费者。当有多个消费者时,这些消费者就组成了一个消费者集群。集群中的消费者彼此合作,共同接收同一个队列中的所有消息;但是,队列中的任意一条消息有且只被消费者集群中的一个消费者消费。0011哈希表又称散列表,是一种用来存储数据的数据结构。在哈希表中,数据项以键值对的方式存储,每一条数据项都对应一个关键字即键值,查找数据时根据关键字来实现快速直接访问。0012进程进程是具有一定独立功能的程序关于某个数据。
25、集合上的一次运行活动。每个应用程序由一个或多个进程组成,而每个进程又可由一个或多个线程组成。每个进程在执行过程中拥有独立的内存单元,这些内存单元由这个进程下的所有线程共享。0013线程操作系统能够进行运算调度的最小单位。线程存在于进程中,共享同一进程的所有资源。每个线程是指进程中一个单一顺序的控制流,线程之间相互独立,并发执行不同的任务。0014锁在计算机科学中,锁是一种协调多个线程对同一资源竞争访问的机制。锁类似为一种权限,持有锁,就相当于持有访问相关资源的权限。每个资源都有一把锁,只有获得这把锁的线程才能访问该资源,其余未获得锁的线程,只能等待。当持有锁的线程释放锁时,所有想获得该锁的线程。
26、通过竞争去获得这把锁。因为每个资源只有一把锁,所以任何时刻都只有一个线程能持有这把锁,即任何时刻只有一个线程能够访问这个资源,从而协调多个线程对资源的访问。0015众所周知,在分布式系统中,系统各组件间的通信通常是由消息中间件来完成的。消息中间件为分布式系统提供消息传递服务,保证组件间消息传递的高效性和可靠性。消息中间件在传递消息时可以遵循多种消息传递模型,其中当今较受欢迎的模型有两种发布/订阅模型与消息队列模型。但是,由于发布/订阅和消息队列两种模型在语义上的差别,要在一个消息中间件中同时实现这两种模型比较困难,而且,即使实现了,也很难同时保证其稳定性和可靠性。然而,用户在开发业务系统时,确。
27、实存在对不同消息模型的需求。如消息推送需要使用发布/订阅模型,任务调度则需要使用消息队列模型。另外,随着用户业务系统的不断扩展,用户在不同时期可能对消息模型也会有不同需求。但消息中间件属于基础性服务,一经使用是很难、甚至是不可能变换的,所以用户需要使用不同的消息传递模型时,不得不额外添加消息中间件来满足业务需求。0016在实际环境中,基于分布式系统的消息中间件通常需要部署多台服务器,从而能够对外提供可扩展的、高可用的和高性能的消息传递服务。在这种情况下,如果要同时使用两种支持不同消息传递模型的消息中间件,考虑到消息服务端对系统资源的大量占用,就需要部署两个彼此独立的消息服务端集群。这样做,从系。
28、统开发角度来看,一定程度上增加说明书CN104092767A3/15页8了开发难度;从用户角度来看,既增加了设备投资的经济费用,还要增加维护成本。0017目前,在分布式消息中间件的技术领域中,比较成熟的项目还比较少。来自国外的有由LINKEDIN贡献到APACHE的KAFKA和由YAHOO贡献到APACHE的HEDWIG,这两个系统都是基于主题的发布/订阅系统。来自国内的项目仅有基于KAFKA思想研发开源到GITHUB上的METAMORPHOSIS,而且,相对于国外的上述两个项目,其得到的关注非常小。KAFKA使用拉模式、即消费者主动向系统拉取消息的方式来实现消息分发,结合其对消费者本身的设计。
29、,KAFKA提供了极大的灵活性,使消费者能够自由地选择获取队列中某一条消息,而不是被动接受。HEDWIG则使用推模式、即系统主动向消费者推送消息的方式来实现消息分发,这种模式使性能和资源利用率都能够很轻易地达到一个比较高的水平,同时还使客户端的控制逻辑相对简单,更具透明性。0018因为本发明系统是在基于主题的发布/订阅系统中增加消息队列传递模型,组成一个能够同时支持发布/订阅和消息队列两种传递模型的消息中间件系统。因此,先介绍现有技术的基于主题的发布/订阅系统的结构组成和基本情况。0019在基于主题的发布/订阅系统中,消息被归类成不同的主题,并以主题为单位进行发布和订阅。发布者是消息的生产者,。
30、可以往不同的主题生产消息;且其在发布消息时,需要设定发布到哪个主题。订阅者是消息的消费者,可以接收自己感兴趣的消息,但订阅者必须先订阅自己感兴趣的主题,然后才能接收已订阅主题的新消息。所有发布到某个主题的消息都会被所有已经订阅该主题的订阅者接收,即一条消息会被多个消费者消费。该系统主要包括服务端和客户端两部分,参见图1,具体介绍基于主题的发布/订阅系统的结构组成0020客户端,作为消息的发布者和订阅者,负责向服务器端发送设定主题的消息以及接收来自服务器端中已订阅主题的新消息。设有下述四个功能模块0021数据通信模块,是客户端的最底层模块,负责接收所有来自服务器端的数据,并传送给响应处理模块;同。
31、时将所有来自客户端的数据发送至网络,以供传送给服务器端。0022响应处理模块,负责处理来自数据通信模块的、包括服务器端对客户端发布请求和订阅请求的处理响应处理成功或失败,以及服务器端发送给订阅者的主题消息的所有数据,并传送给相应模块若是请求的处理响应数据,则传送给发布订阅接口模块;若是主题消息数据,则传送给消息处理模块。0023发布/订阅接口模块,用作用户发布消息和订阅主题的交互接口,再将发布请求和订阅请求经由数据通信模块传送到服务器端;设有消息发布者和消息订阅者两个接口单元消息发布者接口单元用于将消息发布到不同主题,消息订阅者接口单元用于向用户提供订阅感兴趣的主题。0024消息处理模块,负责。
32、接收与消费服务器端发来的主题消息,并对已消费消息向服务器端返回确认信号;设有三个功能单元消息缓存单元负责将响应处理模块发送来的主题消息数据进行缓存,直到该消息被真正消费时被取出;消息消费单元负责在用户真正消费时从缓存单元取出主题消息;消息确认单元负责对已消费消息向服务器端返回确认信号。0025服务端,作为该系统的控制中枢,负责接收消息发布者发送来的消息,并将该消息存储到对应的主题,以及将已订阅主题的新消息发送给订阅者;设有下述七个功能模块说明书CN104092767A4/15页90026数据通信模块,是服务器端的最底层模块,负责接收所有来自客户端的数据,并传送给请求处理模块,同时将所有来自服务。
33、器端的数据发送到网络,再传送给客户端。0027请求处理模块,负责处理来自数据通信模块的所有数据,包括客户端的发布请求、订阅请求及其对已消费消息的确认信号,并传送给相应模块若是发布请求,则告知主题管理模块更新相关主题信息,再将该请求中的消息数据发送给消息存储模块;若是订阅请求,则告知订阅管理模块更新相关订阅者的信息;若是确认信号,则将该信号分别传递给消息传递模块和订阅管理模块。0028主题管理模块,负责管理系统中所有主题的相关信息包括系统拥有的主题数量、每个主题的存储位置、当前消息数量及其当前的订阅者信息。0029订阅管理模块,负责管理系统中所有主题订阅者的相关信息包括订阅者已订阅的主题信息,以。
34、及每个订阅者对其各自已订阅主题的消费信息。0030消息存储模块,负责在接收到来自请求处理模块的消息后,将每个主题新发布消息先送到消息缓存区进行缓存,然后根据情况酌情送到消息持久层单元,以便进行持久化存储到数据库或作其他处理。0031消息传递模块,负责将主题消息传递给对应的订阅者先从订阅管理模块和主题管理模块获取订阅者信息及其所订阅的主题信息后,确定要给每个订阅者传递的各自不同消息后,再从消息存储模块拿取需要传递的消息,最后经由数据通信模块将消息发送给用户。0032因为基于主题的发布/订阅系统是将消息归类为不同的主题,并以主题为单位进行发布和订阅,而消息队列模型则是将消息归类为不同的队列,并以队。
35、列为单位进行生产和消费。由此可见,主题发布/订阅模型中的“主题”和消息队列模型中的“队列”相类似,都是作为消息的归类单位。而且,两种模型的消息生产过程几乎没有差异,但其消息的消费过程差异很大,这是由模型本身的不同语义决定的。在发布/订阅模型中,一条消息可以被多次消费,而消息队列模型中一条消息只能被消费一次。0033由于主题发布/订阅模型和消息队列模型有很多相似之处,所以在主题发布/订阅模型系统中添加消息队列模型语义时,可以大量复用原有发布/订阅模型来实现之,这样做既降低了开发难度,还使得新添加的队列模型可以与原有发布/订阅模型更好地结合。另外,为了降低对原有发布/订阅模型的影响,添加消息队列模。
36、型时,应尽量不更改原有发布/订阅系统的核心操作流程。所以本发明采用复用原有的发布/订阅系统的服务端,只更改原有客户端的结构组成及其实现方式来添加消息队列模型。0034诚然,为了能够在现有的发布/订阅系统中增添消息队列模型,使得该系统能够同时支持两种消息传递模型,业内科技人员作了大量的研发工作,解决了许多难题。发明内容0035有鉴于此,本发明的目的是提供一种增加消息队列模型的发布/订阅系统及其工作方法,本发明宗旨是解决用户变换底层消息传递模型比较困难的问题,例如从发布/订阅模型转换为消息队列模型,或从消息队列模型转换为发布/订阅模型,亦或是同时需要两种消息传递模型。本发明系统是在基于主题的发布/。
37、订阅系统上增加消息队列模型的语义,使得原本只支持单一发布/订阅模型的消息中间件,能够同时支持发布/订阅和消息队说明书CN104092767A5/15页10列两种模型,同时保证两种模型的可用性、伸缩性和其他性能都在可接受范围内,使得用户在使用消息中间件时,既可随时从单一消息传递模型转换为同时使用两种模型,也可随时从使用其中一种模型转换为使用另一种模型,从而满足用户变换消息传递模型的需求。0036为了达到上述目的,本发明提供了一种增加消息队列模型的发布/订阅系统,包括由多个服务节点组成的分布式消息中间件服务端集群和由众多终端组成的客户端集群,所述分布式消息中间件服务端集群中的服务节点仍然由原发布/。
38、订阅系统的相应模块所组成,且各模块功能与信息传递关系保持不变;其特征在于所述系统还增设有分布式协调服务器集群,由该分布式协调服务器集群提供的分布式协调服务对该系统中的客户端集群进行协调管理;且该系统是在基于主题的发布/订阅系统中增添消息队列模型而构成的,其中的客户端同时设有发布/订阅模型和消息队列模型的两种调用接口,以供用户在使用消息中间件时,能够不更换底层消息中间件就调用两种不同接口,直接选择使用发布/订阅或消息队列两种不同的消息传递模型;故该系统客户端既是发布/订阅模型中消息的发布者和订阅者负责向服务端中设定主题发送消息和接收来自服务端中已订阅主题的新消息;又是消息队列模型中队列消息的生产。
39、者和消费者负责向服务端中设定队列发送消息和接收来自服务端中已绑定队列的新消息;该客户端设有下述六个功能模块0037数据通信模块,作为客户端的最底层模块,负责接收所有来自服务端的处理响应或消息数据,并传送给响应处理模块;同时将所有来自客户端的请求或消息数据发送至网络,以供传送给服务端;0038响应处理模块,负责处理来自数据通信模块的、包括服务端对客户端发布请求和订阅请求的处理响应、即处理成功或失败,以及服务端发送给订阅者或消费者的主题或队列消息,并传送给相应模块若是请求的处理响应,则传送给发布/订阅接口模块;若是主题或队列的消息,则传送给消息处理模块;0039发布/订阅接口模块,用作用户发布消息。
40、和订阅主题的交互接口,将发布请求和订阅请求经由数据通信模块传送到服务端;设有消息发布者和消息订阅者两个接口单元消息发布者接口单元用于将消息发布到设定主题,并生成发布请求,消息订阅者接口单元用于订阅用户感兴趣的主题消息,并生成订阅请求;0040消息队列接口模块,用作用户发送和接收队列消息的交互接口,将发送请求和接收请求经由发布/订阅接口模块传递到数据通信模块,再传送到服务端;设有队列生产者和队列消费者两个接口单元队列生产者接口单元用于发送消息到设定队列,并生成发送请求和调用发布/订阅接口模块的发布者单元,将发送请求封装成发布请求后,传递给数据通信模块;队列消费者接口单元负责绑定用户要求消费的队列。
41、,并生成接收请求和调用发布/订阅接口模块的订阅者单元,将接收请求封装成订阅请求传递给数据通信模块0041协调服务模块,设有锁管理单元和队列指针单元,其中的锁管理单元负责为用户绑定的每个队列维护其队列锁,队列指针单元负责为用户绑定的每个队列维护其队列指针;且该队列锁和队列指针将根据消息处理模块的消息消费单元传递来的信息进行及时更新;0042消息处理模块,负责接收与消费来自服务端的主题或队列的消息,并对已消费消息向服务端返回确认信号;设有三个功能单元0043消息缓存单元负责将响应处理模块发送来的主题或队列消息进行缓存,直到该消说明书CN104092767A106/15页11息被消费时被取出;004。
42、4消息确认单元负责对已消费的主题或队列消息向服务端返回确认信号;0045消息消费单元负责消息的消费管理在发布/订阅模型中,用户消费时从消息缓存单元直接提取主题消息;而在消息队列模型中,用户消费每条消息时,需要先从协调服务模块的锁管理单元获取队列锁,再从队列指针单元获取队列指针后,才能从消息缓存单元中提取该条队列消息;且在每条队列消息被消费结束后,负责将队列锁释放给锁管理单元和更新队列指针单元中的队列指针。0046所述分布式消息中间件服务端集群,作为该系统的控制中心,既负责接收发布/订阅模型中的消息发布者发送来的消息,并将该消息存储到对应的主题,以及将已订阅主题的新消息发送给消息订阅者;也负责接。
43、收消息队列模型中的消息生产者发送来的消息,并将该消息存储于设定队列,以及将已绑定队列的新消息发送给消息消费者;设有下述七个功能模块0047数据通信模块,作为服务端的最底层模块,负责接收所有来自客户端的数据,并传送给请求处理模块,同时将所有来自其他模块的数据发送到网络,再传送给客户端;0048请求处理模块,负责处理来自数据通信模块的所有数据,包括客户端的发布请求、订阅请求及其对已消费消息的确认信号,并传送给相应模块若是消息发布请求,则告知主题管理模块更新相关主题信息,再将该请求中的消息数据发送给消息存储模块;若是订阅请求,则告知订阅管理模块更新相关订阅者的信息;若是确认信号,则将该信号分别传递给。
44、消息传递模块和订阅管理模块;0049主题管理模块,负责管理系统中所有主题的相关信息包括系统拥有的主题数量、每个主题的存储位置、当前消息数量及其当前的订阅者信息;0050订阅管理模块,负责管理系统中所有主题订阅者的相关信息包括订阅者已订阅的主题信息,以及每个主题订阅者对各自已订阅主题的消费信息;0051消息存储模块,负责在接收到来自请求处理模块的消息后,将每个主题新发布消息先送到消息缓存区进行缓存,同时将该新发布消息送到消息持久层单元进行持久化存储;0052消息传递模块,负责将主题消息传递给对应的订阅者先从订阅管理模块和主题管理模块获取订阅者信息及其所订阅的主题信息后,再从消息存储模块拿取需要传。
45、递的主题消息,最后经由数据通信模块将该主题消息发送给客户端。0053所述由多个服务节点组成的分布式消息中间件服务端集群、分布式协调服务器集群和由众多终端组成的客户端集群共三个集群内都包括数量不等的多个节点,且这三个集群共同部署在相同节点上,或分别部署在不同节点上。0054所述分布式协调服务器集群采用包括APACHEZOOKEEPER系统的分布式协调服务器构成,其提供的分布式协调服务负责维护每个队列的全局消费指针、即队列指针及其队列锁每个队列的所有消费者在从本地缓存提取每条队列消息进行消费前,必须先从分布式协调服务中获取该队列锁;若未获取到该队列锁,则等待;若获取到该队列锁,则读取分布式协调服务。
46、中队列的全局消费指针,获悉下一条应该被消费的消息序号后,才能够从本地缓存中提取对应序号的队列消息,然后更新全局消费队列指针将其数值加1;最后释放该队列锁,即将该队列锁返回给分布式协调服务,以供其他消费者使用。说明书CN104092767A117/15页120055所述消息队列是计算机科学中的一种进程间通信或同一进程的不同线程之间的通信方式,消息队列模型使用异步通信协议,以使通信参与者在空间和时间上解耦队列消息的生产者和消费者无需直接通信,队列消息被发送到一个队列进行保存,直到消费者从该队列中读取该消息;且在消息队列模型中,每条消息只能够被一个消费者消费、即读取和使用之,也就是每条消息只能够被消。
47、费一次。0056为了达到上述目的,本发明还提供了一种采用本发明增加消息队列模型的发布/订阅系统的工作方法,其特征在于所述工作方法分别包括消息队列模型中的队列消息生产和消费过程,以及发布/订阅模型中的主题消息发布和订阅过程;且因消息队列模型中的队列消息生产过程和发布/订阅模型中的主题消息发布过程的操作步骤相同,故消息队列模型中的队列生产者发送队列消息的操作就复用了发布/订阅模型中的主题消息发布过程将该系统中向某个队列发送消息直接视为向某个主题发布消息,每条消息是按照时间顺序逐条发送到指定队列;消息队列模型的队列消息生产过程包括下述操作步骤0057步骤1,客户端的队列生产者发出发送消息请求客户端的。
48、消息队列接口模块中的队列生产者单元发起消息发送过程,将要发送的队列消息传递给发布/订阅接口模块的消息发布者单元,消息发布者单元将该发送请求封装成发布请求后,经由数据通信模块发送至网络,再传送至系统服务端;0058步骤2,服务端接收和处理客户端的发布请求并返回响应服务端的数据通信模块接收到发布请求后,直接将其传递给请求处理模块;请求处理模块成功解析发布请求后,先通过数据通信模块向客户端返回发布成功响应,告诉客户端已成功接收该队列消息;同时通知主题管理模块更新该队列消息所属队列的相关信息,并将发布请求中的消息数据传递给存储管理模块进行存储;0059步骤3,服务端对新队列消息进行存储存储管理模块接收。
49、到该队列消息后,先将该队列消息传递至消息缓存区单元进行缓存,同时将其传递至消息持久化层单元,以便将该队列消息持久化存储于数据库中;0060步骤4,客户端接收和处理返回的响应客户端的数据通信模块接收到服务端发来的发布成功响应后,直接上传给响应处理模块;响应处理模块成功解析后,通知发布/订阅接口模块的消息发布者单元发布成功。0061因为根据消息队列的语义,队列消费者在接收消息时,需先发出与要消费的队列相连接的接收请求,以便将队列消费者和该要消费的队列消息进行一一绑定;而所述系统中的消息队列模型是基于发布/订阅系统实现的,队列是用主题模拟的,故绑定队列消费者及其消费队列的实质是绑定消息订阅者和主题,并采用订阅操作实现之;因此,所述系统的消息队列模型中,队列消费者在发出接收请求时,实际上是执行绑定队列消费者及其消费的队列消息的订阅操作。0062所述消息队列模型中队列消息的消费过程包括下述操作步骤0063步骤A,客户端的队列消息消费者发出接收消息请求客户端的消息队列接口模块中的队列消费者单元发出接收请求,将其传递给发布/订阅接口模块的消息订阅者单元,消息订阅者单元将该接收请求封装成一个订阅请求,经由数据通信模块发送至网络,再传送至系统服务端;0064步骤B,服务端接收和处理客户端的订阅请求并返回响应服务端的数据通信模说明书CN104092767A128/15页13块接收到订阅请求后,直接传。