本发明涉及计算机技术领域,特别涉及一种消息队列实现方法。
背景技术
消息队列是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行,不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。
消息队列是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不同的技术之间共享资源,管理计算资源和网络通讯。它在计算机系统中是一个关键软件,它能实现应用的互连和互操作性,能保证系统的安全、可靠、高效的运行。消息队列位于用户应用和操作系统及网络软件之间,它为应用提供了公用的通信手段,并且独立于网络和操作系统。为开发者提供了公用于所有环境的应用程序接口,当应用程序中嵌入其函数调用,它便可利用其运行的特定操作系统和网络环境的功能,为应用执行通信功能。
目前在生产环境,使用较多的消息队列有activemq、rabbitmq、kafka、metamq、rocketmq等,实现了消息数据包的点对点传输、发送/订阅等数据分发功能。但这些消息队列中的存储的消息数据都是平级的,采用“先入先出”的机制进出消息队列,而在实际的生产环境中,消息数据的重要性是不同的,应用系统更关注那些对系统性能有关键影响的消息数据,这些消息数据应该优先进行处理,而现在常用的消息队列无法实现这些应用需求。
技术实现要素:
本发明的目的在于针对现有技术的不足,提供一种新的消息队列实现方法,该方法有利于提高消息数据包处理的效率和实时性,提高消息队列的灵活行。
本发明的目的是通过以下的技术方案来实现的。本发明是一种基于消息队列实现方法,其特点是,该方法包括:
配置消息队列,启动消息队列服务;
利用消息队列接收外部程序挂载的消息数据包,并缓存在结点存储队列中;
通过上述的消息队列,将结点消息数据分发到外部的数据接收方,接收方按照约定的格式解析消息数据包的内容;
接收外部程序的消息数据包调用请求,按照调用请求,将对应结点的消息数据封装,发送给请求方。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,所述的消息队列采用树状分层存储,包括:
由结点嵌套构成;
所有的消息数据包都属于某个结点;
每个结点存储队列遵循存储规范的要求。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,由结点嵌套构成的树状的消息数据存储结构,是一个n个结点的有限集,只有一个根结点,根结点没有前驱结点,其余每个结点有且只有一个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点是一个或者是多个,树中任意一个结点的各子结点之间的次序无关联关系;每个结点配置一段存储空间,实现结点属性数据和结点消息数据的存储。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,所述配置部署消息队列包括:
搭建消息队列服务程序,并开启队列服务;
读取队列重构日志文件,构建树状分层存储结构;
确定消息队列的访问路径、访问端口。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,将所述的消息队列的访问路径、访问端口,进行数据加密后,在局域网范围内进行广播;以使数据发送方解析消息队列访问路径和访问端口,向所述消息队列发送消息数据包;以使数据接收方解析消息队列访问路径和访问端口,接收所述消息队列转发的消息数据包。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,构建消息数据包的规范格式,包括:
消息头,携带消息数据在树中的结点路径;
消息体,包括消息id、消息级别、时间戳、消息内容;
通过消息id可以精确定位消息及所处的结点。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,消息头包含消息存储路径数据,是一个分层的结点字符串,各结点通过“/”进行分隔;消息体由消息id、消息级别、时间戳、消息内容四部分构成,该id全局唯一;消息内容可以是文本数据、二进制数据或者字符串数据三种类型。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,所述的树结点存储的消息数据的存储方式以及进出队列规则,包括:
结点为环状存储结构,接收发送方的消息数据包按序循环插入结点存储队列,队列长度固定,消息数据包接收方可以请求最新消息数据包,或者是最新点之前固定数量的消息数据;
或者,结点为线性存储结构,消息数据包按照先进先出规则进行处理,按照消息数据包时间先后顺序处理;消息数据包按照先进后出规则进行处理,后进队的消息数据包优先处理。
消息数据包具有优先级属性,优先级高的消息数据包优先插进结点存储队列前端,优先进行处理。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,该方法通过读取配置信息,自动通过重构日志生成消息队列存储结构;接收网络调用请求;接收外部程序发送消息数据包,解析消息头数据,识别消息头中包含的挂载结点路径数据,如果消息队列中已经存在对应的路径结点,则将消息体写入对应结点,如果不存在,则首先生成新的树结点,然后将消息体写入对应结点;接收外部程序的定制请求指令;定制方法分为三种:
按结点精确定制,请求不同深度单个结点的消息数据;
按层模糊定制,请求同级结点的消息数据;
按结点嵌套定制,请求本结点及所有子结点的消息数据。
本发明所述的基于消息队列实现方法,其进一步优选的技术方案或者技术特征是,消息队列的数据访问接口包括:通过udp、tcp或http方式实现消息队列系统的监视;实现消息队列结点分层结构的重构;实现各结点消息数据传输状态监视;实现各个结点消息数据变化的实时更新监视。
与现有技术相比,本发明的有益效果为:本发明方法是解决复杂应用系统的功能解耦的重要技术手段,具有异步消息处理、流量削锋等功能,实现一个用系统高性能,高可用,可伸缩和最终一致性架构。通过优选所述的消息队列的存储结构,容许外部程序精确接收和处理的消息数据包,而不会收到无关的消息数据包,节约计算资源、提高处理性能,消息数据包划分优先级,优先级高的消息数据包排在结点存储队列的前端,外部程序优先收到这类消息数据包。本发明方法有利于提高消息数据包处理的效率和实时性,提高消息队列的灵活行。可以降低消息数据收发的耦合性、提升灵活度。
附图说明
图1为消息队列树形存储结构图;
图2为外部程序挂载消息数据包流程图;
图3为结点为环状存储结构存储队列示意图;
图4为结点为线性存储结构存储队列,先进先出示意图;
图5为结点为线性存储结构存储队列,后进先出示意图;
图6为具有优先级的消息数据包进出队规则示意图。
具体实施方式
为使本发明实施的目的、技术方案和优点更加清楚,下面将结合具体实施例,对本发明中的技术方案进行清楚、完整地描述。
实施例1,一种基于消息队列实现方法,该方法包括:
配置消息队列;
启动消息队列服务;
利用消息队列接收外部程序挂载的消息数据包,并缓存在结点存储队列中;
通过上述的消息队列,将结点消息数据分发到外部的数据接收方,接收方按照约定的格式解析消息数据包的内容;
接收外部程序的消息数据包调用请求,按照调用请求,将对应结点的消息数据封装,发送给请求方。
实施例2,实施例1所述的基于消息队列实现方法中,所述的消息队列采用树状分层存储,包括:
由结点嵌套构成;
所有的消息数据包都属于某个结点;
每个结点存储队列遵循存储规范的要求。
实施例3,实施例2所述的基于消息队列实现方法中,由结点嵌套构成的树状的消息数据存储结构,是一个n个结点的有限集,只有一个根结点,根结点没有前驱结点,其余每个结点有且只有一个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点是一个或者是多个,树中任意一个结点的各子结点之间的次序无关联关系;每个结点配置一段存储空间,实现结点属性数据和结点消息数据的存储。
实施例4,实施例1或2所述的基于消息队列实现方法中,所述配置部署消息队列包括:
搭建消息队列服务程序,并开启队列服务;
读取队列重构日志文件,构建树状分层存储结构;
确定消息队列的访问路径、访问端口。
实施例5,实施例4所述的基于消息队列实现方法中,将所述的消息队列的访问路径、访问端口,进行数据加密后,在局域网范围内进行广播;以使数据发送方解析消息队列访问路径和访问端口,向所述消息队列发送消息数据包;以使数据接收方解析消息队列访问路径和访问端口,接收所述消息队列转发的消息数据包。
实施例6,实施例1或2所述的基于消息队列实现方法中,构建消息数据包的规范格式,包括:
消息头,携带消息数据在树中的结点路径;
消息体,包括消息id、消息级别、时间戳、消息内容;
通过消息id可以精确定位消息及所处的结点。
实施例7,实施例6所述的基于消息队列实现方法中,消息头包含消息存储路径数据,是一个分层的结点字符串,各结点通过“/”进行分隔;消息体由消息id、消息级别、时间戳、消息内容四部分构成,该id全局唯一;消息内容可以是文本数据、二进制数据或者字符串数据三种类型。
实施例8,实施例1-7中任何一项所述的基于消息队列实现方法中,所述的树结点存储的消息数据的存储方式以及进出队列规则,包括:
结点为环状存储结构,接收发送方的消息数据包按序循环插入结点存储队列,队列长度固定,消息数据包接收方可以请求最新消息数据包,或者是最新点之前固定数量的消息数据;
或者,结点为线性存储结构,消息数据包按照先进先出规则进行处理,按照消息数据包时间先后顺序处理;消息数据包按照先进后出规则进行处理,后进队的消息数据包优先处理。
消息数据包具有优先级属性,优先级高的消息数据包优先插进结点存储队列前端,优先进行处理。
实施例9,实施例1-8中任何一项所述的基于消息队列实现方法中,该方法通过读取配置信息,自动通过重构日志生成消息队列存储结构;接收网络调用请求;接收外部程序发送消息数据包,解析消息头数据,识别消息头中包含的挂载结点路径数据,如果消息队列中已经存在对应的路径结点,则将消息体写入对应结点,如果不存在,则首先生成新的树结点,然后将消息体写入对应结点;接收外部程序的定制请求指令;定制方法分为三种:
按结点精确定制,请求不同深度单个结点的消息数据;
按层模糊定制,请求同级结点的消息数据;
按结点嵌套定制,请求本结点及所有子结点的消息数据。
实施例10,实施例1-9中任何一项所述的基于消息队列实现方法中,消息队列的数据访问接口包括:通过udp、tcp或http方式实现消息队列系统的监视;实现消息队列结点分层结构的重构;实现各结点消息数据传输状态监视;实现各个结点消息数据变化的实时更新监视。
实施例11:一种消息队列的实现方法,该方法包括以下步骤:
步骤sa01:配置消息队列,部署网络服务;
步骤sa02:启动消息队列服务,读取配置信息、重构日志;
步骤sa03:依据读取的配置信息、重构日志生成消息队列存储结构;
根据如图1所示,读取配置信息、重构日志,生成如图2的消息队列树形存储结构,并初始化每个结点的属性数据和结点队列;每个结点队列结构如图3、图4、图5所示,存储不同的种类的消息数据包。
步骤sa04:接收外部程序的调用请求;
通过向局域网广播通知消息,外部程序通过对通知消息的解析,识别服务地址和服务端口,自动发现消息队列服务;外部程序通过服务端口和服务地址连接消息队列,发送调用请求。
步骤sa05:提供消息数据存储、转发、挂载服务;
接收外部程序的消息挂载请求:外部程序将固定格式的消息数据包通过网络发送给消息队列,消息队列依据约定的规则解析消息数据包;如果消息数据包结构正确,将消息体数据存储到对应树结点队列中;优先级高的消息数据包存储在树结点队列的前端,优先出队,如图6所示;结点数据存储方式受结点属性数据的约束;如果消息数据包结构错误,则向外部程序返回错误应答。
接收外部程序的消息请求指令:外部程序通过网络向消息队列发送消息请求指令,消息队列依据约定的规则解析消息请求指令,请求的数据范围可以是单结点数据、单结点及其所包含子结点数据、同级结点数据:如果消息请求指令正确,将请求结点的队列中的数据按照规则发给数据接收方;如果消息请求指令错误,则向外部程序返回错误应答。正确消息数据包转发规则包括:单条转发、定时批量转发、定长度批量转发。
步骤sa06:更新消息队列存储结构;
如果外部程序发送的消息请求指令,解析后不存在对应的树结点,则消息队列依据消息头结构重新生成结点插入树存储队列结构中,并通过广播方式进行通知。
步骤sa07:更新重构日志;
树结构信息依据规则保存到重构日志文件中,通过重构日志可以一致性恢复树结构。保存规则包括:树结点变更的保存、定时保存、消息队列停止前的保存。