一种消息队列实现方法与流程

文档序号:15850585发布日期:2018-11-07 09:49阅读:437来源:国知局
一种消息队列实现方法与流程

本发明涉及计算机技术领域,特别涉及一种消息队列实现方法。

背景技术

消息队列是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行,不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。

消息队列是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不同的技术之间共享资源,管理计算资源和网络通讯。它在计算机系统中是一个关键软件,它能实现应用的互连和互操作性,能保证系统的安全、可靠、高效的运行。消息队列位于用户应用和操作系统及网络软件之间,它为应用提供了公用的通信手段,并且独立于网络和操作系统。为开发者提供了公用于所有环境的应用程序接口,当应用程序中嵌入其函数调用,它便可利用其运行的特定操作系统和网络环境的功能,为应用执行通信功能。

目前在生产环境,使用较多的消息队列有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:更新重构日志;

树结构信息依据规则保存到重构日志文件中,通过重构日志可以一致性恢复树结构。保存规则包括:树结点变更的保存、定时保存、消息队列停止前的保存。

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