一种基于消息队列实现消息接收与转发的方法及系统与流程

文档序号:12671422阅读:212来源:国知局
一种基于消息队列实现消息接收与转发的方法及系统与流程
本发明涉及数据通讯领域,具体涉及一种基于消息队列实现消息接收与转发的方法及系统。

背景技术:
在政府或企业应用系统建设及系统整合过程中,通常采用消息中间件把分布在网络各处自治、异构的信息系统有效地集成为一体化的系统。现有消息中间件通常采用以数据交换服务器为数据交换中心的工作机制,消息发送端将消息发送给数据交换服务器,数据交换服务器再将消息转发给消息接收端,其优点在于客户端只需和服务器进行交互,消息发送端和消息接收端不必同时在线,消息发送端和消息接收端不必直接建立连接即可进行消息的传输。现有技术中,数据交换服务器在收到消息时,待转发给消息接收端的消息驻留在内存中,或者将消息保存在数据库或文件系统中。将消息存放在内存中的弊端是内存资源总是有限的,数据交换服务器在大量接收、转发消息的情况,消息队列将被占满,后续的消息无法存放进消息队列而被丢弃,造成传输数据的丢失,而且如果出现掉电、系统异常崩溃等突发情况,即使写入消息队列的消息也会丢失。如果将消息保存在数据库或文件系统的外部存储系统中,消息转发需要从外部存储设备中读取,由于外部存储设备存取速度慢,会引起消息传输的性能瓶颈。申请号为200810239601.2、公开号为CN101431476、发明名称为“一种基于消息队列的数据传输方法、服务器及系统”的中国专利申请,(申请人为中国工商银行股份有限公司),公开了一种通过接收消息队列和发送消息队列进行消息接收、转发的方法,该方法中接收消息队列和发送消息队列均在内存中,不能保证消息传输的可靠性。申请号为200680023379.1、公开号为CN101208671、发明名称为“管理消息队列”的中国专利申请(申请人为起元软件有限公司),提供了一种用于将数据写入到多个队列的方法、相应的软件和系统,其中数据的每一部分被写到相应的一个队列。该方法虽然将每一队列同步到非易失性存储器,但是非易失性存储器上的数据是内存队列中数据的镜像,这种方式处理消息的能力决定于内存容量。申请号为200910092421.0、公开号为CN102023974A、发明名称为“一种通过消息队列处理消息的方法、装置和系统”的中国专利申请(申请人中国移动通信集团公司),在内存中引入了第一消息队列用于接收消息,引入第二消息队列用于消费消息,并且将消息存入数据库中。这种方式消息接收和处理需要两个消息队列驻留在内存中,而且还依赖数据库触发器将消息从第一队列发送到第二消息队列,这种方式借助数据库触发器进行操作,处理复杂;在将消息从第一队列发送到第二队列时,涉及数据库读写操作,性能较差。。另外现有技术在消息转发队列中直接转发队列中的消息,由于消息转发速度依赖网络带宽和运行消息接收端的计算机的综合性能,转发消息通常需要花费一定的时间,而在消息转发过程中,通常需要锁定消息转发队列,不能往消息转发队列存入新的需要转发的消息,这会引起系统内部资源阻塞,导致消息转发性能下降,影响消息传输的实时性。因此,现有技术无法满足企业级应用系统消息量大、要求数据高效、可靠传输的需求。

技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于消息队列实现消息接收与转发的方法及系统,在保证消息传输可靠性的同时提高了消息传送的实时性与传输性能。为实现上述目的,本发明采用的技术方案如下:一种基于消息队列实现消息接收与转发的方法,包括以下步骤:(1)消息发送端将消息发送到数据交换服务器;(2)数据交换服务器接收到消息发送端的消息后,根据所述消息的路由配置信息,确定所述消息的消息接收端;所述消息接收端为一个或者多个;(3)数据交换服务器将接收到的待转发消息分别保存到每个消息接收端所对应的外存消息队列中;所述外存消息队列保存在外部非易失性存储设备上;(4)数据交换服务器将所述待转发消息存放到消息接收端所对应的内存消息队列中;(5)提取内存消息队列中的待转发消息,并将所述待转发消息转发给内存消息队列所对应的消息接收端。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,数据交换服务器首次向某个消息接收端转发消息时为其创建内存消息队列,每个消息接收端对应唯一的内存消息队列。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(3)与步骤(4)之间还包括以下步骤:(3-4)数据交换服务器判断消息接收端是否存在对应的内存消息队列,若是则进入步骤(4),若否则数据交换服务器为消息接收端创建内存消息队列后进入步骤(4)。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,在创建内存消息队列时,设置内存消息队列的消息队列容量,所述消息队列容量由消息个数和消息数据量决定。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(4)中,数据交换服务器将待转发消息保存到消息接收端所对应的内存消息队列之前,首先判断该消息接收端的内存消息队列是否为忙,若否则直接执行步骤(4),若是则查看是否存在下一消息接收端,若是则获取下一消息接收端进入步骤(3),若否则处理结束。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,当内存消息队列满足以下条件之一时,确定内存消息队列为忙:a、内存消息队列中实际存放的消息个数达到消息队列容量指定的消息个数,即确定内存消息队列为忙;b、当消息队列占比系数达到设定阈值时,则确定内存消息队列为忙;所述消息队列占比系数是指内存消息队列中实际存放的所有消息的消息数据量总和与消息队列容量指定的数据量的比值。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(5)中,提取内存消息队列中的待转发消息,并将所述待转发消息转发给内存消息队列所对应的消息接收端的具体方式为:1)将内存消息队列中的所有消息提取到消息列表中,并从内存消息队列中删除已经提取过的消息;2)查看所述消息列表是否为空,若否则进入步骤3),若是则查看内存消息队列的消息接收端所对应的外存消息队列是否为空,若是则处理结束,若否则读取外存消息队列中的待转发消息并将所述待转发消息发布到消息接收端所对应的内存消息队列中并返回步骤1);3)获取消息列表中的消息,数据交换服务器将所获取的消息逐条转发给内存消息队列所对应的消息接收端。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(5)中,数据交换服务器将消息列表中的消息逐条转发给消息接收端后,删除外存消息队列中所对应的已经转发成功的消息。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(5)中,为消息接收端所对应的内存消息队列创建消息转发线程,通过启动消息转发线程将所获取的消息转发给消息接收端。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(5)中,只启动存在待转发消息的消息接收端的消息转发线程。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(4)中,数据交换服务器将待转发消息存放到消息接收端对应的内存消息队列之前,锁定消息接收端所对应的内存消息队列,将待转发消息存放到内存消息队列之后,数据交换服务器解除对内存消息队列的锁定。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,所述外存消息队列用于保存数据交换服务器尚未转发给消息接收端的消息,每个消息接收端对应唯一的外存消息队列。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤2)中,将外存消息队列中待转发消息发布到内存消息队列中的具体方式为:步骤1、数据交换服务器读取消息接收端所对应的外存消息队列中一条尚未读入内存消息队列中的待转发消息;步骤2、锁定内存消息队列,将所述待转发消息保存到所述内存消息队列中,然后解除对内存消息队列的锁定;步骤3、查看外存消息队列中是否还存在尚未读入内存消息队列中的待转发消息,若是则返回步骤1,若否则进入步骤(5)。进一步,如上所述的一种基于消息队列实现消息接收与转发的方法,步骤(5)中,在将内存消息队列中的待转发消息转发到所对应的消息接收端的过程中,如果数据交换服务器接收到新的消息,并且所接收到的新消息中还存在需要转发给该消息接收端的消息并且该消息接收端对应的内存消息队列空闲,将新消息放入到该消息接收端的内存消息队列中。一种基于消息队列实现消息接收与转发的系统,包括以下装置:消息接收装置:用于接收消息发送端发送到数据交换服务器的待转发给消息接收端的消息;消息路由装置:用于根据数据交换服务器接收到的消息的路由配置信息,确定待转发消息的消息接收端;所述消息接收端为一个或者多个;消息外存装置:用于数据交换服务器将待转发消息保存到消息接收端所对应的外存消息队列中;所述外存消息队列保存在外部非易失性存储设备上;消息内存装置:用于数据交换服务器将待转发消息存放到消息接收端所对应的内存消息队列中;消息转发装置:用于提取内存消息队列中的待转发消息,并将所述待转发消息转发给内存消息队列所对应的消息接收端。进一步,如上所述的一种基于消息队列实现消息接收与转发的系统,所述消息内存装置包括:内存消息队列创建模块:用于当消息接收端不存在内存消息队列时,数据交换服务器为其创建内存消息队列;内存消息队列状态判断模块:用于判断内存消息队列是否忙,若是则处理结束,若否则进入外存消息处理模块;外存消息处理模块:用于数据交换服务器将外存消息队列中的待转发消息发布到所对应的内存消息队列中。进一步,如上所述的一种基于消息队列实现消息接收与转发的系统,所述消息转发装置包括:消息提取模块:用于将内存消息队列中所有待转发消息提取到消息列表中,并从内存消息队列中删除已经提取过的消息;消息获取模块:用于从消息列表中获取一条待转发消息;消息转发模块:用于为内存消息队列建立消息转发线程,并通过启动消息转发线程将消息获取模块获取到的待转发消息转发到内存消息队列所对应的消息接收端;消息列表查看模块:用于查看消息列表中是否存在下一条待转发消息,若是则进入消息获取模块,若否则终止消息转发过程。进一步,如上所述的一种基于消息队列实现消息接收与转发的系统,所述消息转发装置还包括:外存消息删除模块:用于删除外存消息队列中消息转发模块已经转发到消息接收端的消息。本发明的效果在于:本发明所述的一种基于消息队列实现消息接收与转发的方法及系统,通过将消息接收装置接收的消息保存在非易失性存储设备上,由外存消息队列和内存消息队列两个消息队列协同工作实现数据交换服务器对消息的接收和转发,消息转发线程将内存消息队列中已有需要转发的消息一次性提取到消息转发单元的消息列表中,不必长时间占用内存消息队列,在消息转发的过程中不影响往内存消息队列放入新接收到的需要转发的消息。通过本发明所述的方法及系统,数据交换服务器异步并行进行消息的接收和转发,提高了消息传送的实时性;另外对于没有消息需要转发的消息接收端,数据交换服务器不必为其启动转发线程,节约了内存资源和CPU资源,提高了数据交换服务器的传输效率。附图说明图1为本发明一种基于消息队列实现消息接收与转发的方法及系统的整体工作原理图;图2为本发明一种基于消息队列实现消息接收与转发的系统的结构框图;图3为本发明一种基于消息队列实现消息接收与转发的方法的流程图;图4为实施方式中外存消息处理装置的工作流程图;图5为实施方式中消息转发装置实现消息转发的工作流程图。具体实施方式本发明的核心思想是:本发明所述的方法及系统,引入了保存在外部非易失性存储设备的外存消息队列,以及消息接收装置和消息转发装置公用的内存消息队列,数据交换服务器接收消息发送端发送的消息并将消息保存到外存消息队列中,然后再将所述接收的消息存入消息接收端所对应的内存消息队列中;之后创建并启动消息转发线程,启动消息转发线程将消息转发给消息接收端;在转发完消息队列中的所有消息后,终止消息转发线程的运行。通过使用本发明的方法及系统,数据交换服务器异步并行进行消息的接收和转发,提高了消息传送的实时性;通过两个消息队列协同工作,数据交换服务器在大量接收、转发消息的情况下、也能保证数据高效、可靠的传输。下面结合说明书附图与具体实施方式对本发明做进一步的详细说明。由图1中可以看出,本发明的系统包括了数据交换服务器21和消息交换客户端(消息发送端22和消息接收端23),消息接收端可以是一个或者多个。图2示出了本发明一种基于消息队列实现消息接收与转发的系统的结构框图,由图中可以看出,数据交换服务器21是本发明的核心部分。该系统主要包括了消息接收装置211、消息路由装置212、消息外存装置213、消息内存装置214和消息转发装置215,其中,消息接收装置211用于接收消息发送端发送到数据交换服务器的待转发给消息接收端的消息;消息路由装置212用于根据数据交换服务器接收到的消息的路由配置信息,确定待转发消息的消息接收端;所述消息接收端为一个或者多个;消息外存装置213用于数据交换服务器将待转发消息保存到消息接收端所对应的外存消息队列中;外存消息队列保存在外部非易失性存储设备上;消息内存装置214用于数据交换服务器将待转发消息保存到消息接收端所对应的内存消息队列中;该装置包括用于当消息接收端不存在内存消息队列时,数据交换服务器为其创建内存消息队列的内存消息队列创建模块;用于判断内存消息队列是否忙,若是则处理结束,若否则向内存消息队列存入消息;以及用于数据交换服务器将外存消息队列中的待转发消息发布到所对应的内存消息队列中的外存消息处理模块;消息转发装置215用于提取内存消息队列中的待转发消息,并将所述待转发消息转发给内存消息队列所对应的消息接收端;该装置包括用于将内存消息队列中所有待转发消息提取到消息列表中,并从内存消息队列中删除已经提取过的消息的消息提取模块;用于从消息列表中获取一条待转发消息的消息获取模块;用于为内存消息队列建立消息转发线程,并通过启动消息转发线程将消息获取模块获取到的待转发消息转发到内存消息队列所对应的消息接收端的消息转发模块;用于查看消息列表中是否存在下一条待转发消息,若是则进入消息获取模块,若否则终止消息转发过程的消息列表查看模块;以及用于删除外存消息队列中消息转发模块已经转发到消息接收端的消息的外存消息删除模块。图3示出了基于图2中基于消息队列实现消息接收与转发的系统的一种基于消息队列实现消息接收与转发的方法的流程图,该方法主要包括以下步骤:步骤S31:消息发送端将消息发送到数据交换服务器;数据交换服务器21是本发明的核心部分,用以进行消息的接收与转发。数据交换服务器的消息接收装置211接收消息发送端发送的消息。步骤S32:根据消息路由配置信息确定待转发消息的消息接收端;消息路由装置212根据步骤S31中接收到的消息,从接收的消息中提取消息路由配置信息,确定待转发消息的消息接收端。根据消息路由配置信息确定的消息接收端为一个或者多个。步骤S33:将待转发消息保存到消息接收端所对应的外存消息队列中;数据交换服务器将待转发消息保存到消息接收端所对应的外存消息队列中;所述外存消息队列保存在外部非易失性存储设备上。非易失性存储设备是指在没有电源提供给存储设备时,数据能够被保存的设备。将数据存储在非易失性存储设备中使得在人为关机、系统崩溃或者电源故障的事件中能够恢复数据。如硬盘、U盘、软盘、存储卡等均为非易失性存储设备。外存消息队列可以采用文件系统或数据库系统,即把消息存在操作系统文件中或者数据库中。本发明所述的方法是为了解决现有技术中数据交换服务器进行消息接收、转发处理过程中,将待转发消息驻留在内存中而造成消息丢失以及在消息队列中直接进行转发而引起的消息传输性能下降的问题,而提出的基于消息队列实现消息接收与转发的方法,该方法引入了保存在外部非易失性存储设备上的外存消息队列,通过外存消息队列和内存消息队列两个消息队列的协同工作实现数据交换服务器对消息的接收和转发。其中,每个消息接收端对应唯一的外存消息队列,保存在外部非易失性存储设备上,用于保存尚未转发给消息接收端的待转发消息。步骤S34:将待转发消息存放到消息接收端所对应的内存消息队列中;数据交换服务器将待转发消息保存到消息接收端所对应的内存消息队列中。在将待转发消息存放到内存消息队列之前,数据交换服务器首先需要判断消息接收端是否存在对应的内存消息队列,如果存在则直接进行步骤S34,如果不存在,数据交换服务器为消息接收端创建所对应的内存消息队列后进入步骤S34。因此,数据交换服务器首次向某个消息接收端转发消息时为其创建内存消息队列,每个消息接收端对应唯一的内存消息队列。在创建内存消息队列时,需要设置内存消息队列的消息队列容量,所述消息队列容量由消息个数和消息数据量决定。在数据交换服务器将待转发消息保存到消息接收端所对应的内存消息队列时,还需要判断该消息接收端的内存消息队列是否为忙,若否则直接将待转发消息保存到消息接收端所对应的内存消息队列中;若某一消息接收端的内存消息队列为忙,则查看是否存在下一消息接收端,若是则获取下一消息接收端返回步骤S33,若不存在下一消息接收端则处理结束。其中,当内存消息队列满足以下条件之一时,确定内存消息队列为忙:a、内存消息队列中实际存放的消息个数达到消息队列容量指定的消息个数,即确定内存消息队列为忙;b、当消息队列占比系数达到设定阈值时,则确定内存消息队列为忙;所述消息队列占比系数是指内存消息队列中实际存放的所有消息的消息数据量总和与消息队列容量指定的数据量的比值。数据交换服务器将待转发消息转发到消息接收端对应的内存消息队列时,首先锁定消息接收端所对应的内存消息队列,然后将该消息接收端对应的待转发消息存入到内存消息队列中,在存入完成后数据交换服务器解除对内存消息队列的锁定。将外存消息队列中待转发消息发布到内存消息队列的流程图如图4所示,具体方式为:步骤1、数据交换服务器读取消息接收端所对应的外存消息队列中一条尚未读入内存消息队列中的待转发消息;步骤2、锁定内存消息队列,将所述待转发消息保存到所述内存消息队列中,然后解除对内存消息队列的锁定;步骤3、查看外存消息队列中是否还存在尚未读入内存消息队列中的待转发消息,若是则返回步骤1,若否则进入步骤S35。步骤S35:将内存消息队列中的待转发消息转发给所对应的消息接收端。提取步骤S34中内存消息队列中的待转发消息,并将内存消息队列中的待转发消息转发给所对应的消息接收端。转发的详细流程图如图5所示,转发的具体方式为:1)将内存消息队列中的所有消息提取到消息列表中,并从内存消息队列中删除已经提取过的消息;2)查看所述消息列表是否为空,若否则进入下一步,若是则查看所对应的外存消息队列是否为空,若是则处理结束,若否则读取该内存消息队列的消息接收端所对应的外存消息队列中的待转发消息并将所述待转发消息发布到消息接收端所对应的内存消息队列中;3)获取消息列表中的消息,数据交换服务器将所获取的消息逐条转发给内存消息队列所对应的消息接收端。在数据交换服务器将消息列表中的待转发消息逐条转发给消息接收端后,删除外存消息队列中所对应的已经转发成功的消息。在消息转发时,为消息接收端所对应的内存消息队列创建消息转发线程,通过启动消息转发线程将所获取的消息转发给消息接收端。发送时,只启动存在对应的待转发消息的消息接收端,对于没有消息需要转发的消息接收端,数据交换服务器不必为其启动消息转发线程,节约了内存资源和CPU资源,从而提高了数据交换服务器的传输效率。在将内存消息队列中的待转发消息转发到所对应的消息接收端的过程中,如果数据交换服务器接收到新的消息,并且所接收到的新消息中还存在需要转发给该消息接收端的消息并且该消息接收端对应的内存消息队列空闲,将新消息放入内存消息队列中,由此实现消息接收装置和消息转发装置异步并行进行消息的接收和转发,提高消息传送的实时性和转发效率。本发明的方法及系统,数据交换服务器接收消息发送端发送的消息并将所述消息保存在外部非易失性存储设备上,然后将所述接收的消息存入消息接收端对应的内存消息队列中;内存消息队列创建并启动所述消息接收端的消息转发模块,消息转发模块从消息队列提取消息并将消息转发给消息接收端;在转发完消息队列中的所有消息后,终止消息转发模块的运行。通过使用本发明的方法,数据交换服务器异步并行进行消息的接收和转发,提高了消息传送的实时性;通过两个消息队列协同工作,数据交换服务器即使在大量接收、转发消息的情况下、也能保证数据高效、可靠的传输。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1