买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明公布】一种基于消息队列的轻量级数据采集方法_中国人民解放军国防科技大学_202311807389.6 

申请/专利权人:中国人民解放军国防科技大学

申请日:2023-12-26

公开(公告)日:2024-03-29

公开(公告)号:CN117793172A

主分类号:H04L67/141

分类号:H04L67/141;H04L67/562;H04L9/40;H04L69/04

优先权:

专利状态码:在审-实质审查的生效

法律状态:2024.04.16#实质审查的生效;2024.03.29#公开

摘要:本发明公开了一种基于消息队列的轻量级数据采集方法,目的是解决现有轻量级数据采集方法不能适应大规模设备部署和数据传输需求的问题。技术方案是建立由多个客户端和1个服务端组成的基于消息队列的轻量级数据采集系统:客户端安装有客户端程序,服务端安装有消息代理程序。客户端与服务端的消息代理建立连接并进行身份认证。作为消息订阅者的客户端向消息代理注册对特定主题的关注,接收与这些主题相关的消息,完成主题订阅。作为数据发布者的客户端采集数据,并通过消息代理发布消息到各个订阅者,完成数据发布。本发明更加轻量级且提高了数据分发的效率,平衡了可靠性和效率,特别适用于大型分布式系统和复杂的网络结构。

主权项:1.一种基于消息队列的轻量级数据采集方法,其特征在于包括以下步骤:第一步:建立基于消息队列的轻量级数据采集系统:基于消息队列的轻量级数据采集系统由多个客户端和1个服务端组成,客户端安装有客户端程序,服务端安装有消息代理程序;消息代理程序由连接管理模块A、会话管理模块A、安全认证与授权模块和消息代理模块组成;客户端程序由消息集、连接管理模块B、会话管理模块B、消息发布模块和消息订阅模块组成;当客户端程序启用消息发布模块时客户端作为消息发布者,当客户端程序启用消息订阅模块时客户端作为消息订阅者,客户端程序可以同时启用消息订阅模块和消息发布模块;客户端的连接管理模块B与客户端会话管理模块B、消息代理的连接管理模块A相连;客户端的连接管理模块B向消息代理的连接管理模块A发送连接请请求报文进行身份认证,从连接管理模块A接收响应的连接确认报文,若接收到的是成功响应的报文,则生成会话信息B,将会话信息B发送到客户端的会话管理模块B;所述连接请求报文包含连接请求信息,连接请求信息包括客户端的唯一标识符、用户名和密码;消息代理的连接管理模块A与客户端的连接管理模块B、消息代理的会话管理模块A、消息代理的安全认证与授权模块相连;消息代理的连接管理模块A接收客户端的连接管理模块B发送的连接请求报文,连接管理模块A提取连接请求报文中的连接请求信息,将连接请求信息发送到安全认证与授权模块,并从安全认证与授权模块接收认证结果,根据认证结果生成连接确认报文作为连接请求报文的响应发送给客户端的连接管理模块B,对于认证成功的连接请求,生成会话信息A发送给会话管理模块A,会话信息A的内容包括客户端标识符、认证成功信息和接入时间;消息代理的安全认证与授权模块与消息代理的连接管理模块A相连,从连接管理模块A接收连接请求信息,根据连接请求信息进行身份认证,将认证结果返回给消息代理的连接管理模块A;消息代理的会话管理模块A与连接管理模块A、消息代理模块相连,从连接管理模块A接收会话信息A,提取客户端ID,将客户端ID作为接入客户端信息发送到消息代理模块;客户端的会话管理模块B与客户端的连接管理模块B、客户端的消息发布模块、客户端的消息订阅模块相连;客户端的会话管理模块B从连接管理模块B接收会话信息B,根据客户端承担的是作为消息发布者还是消息订阅者启动消息发布模块或是消息订阅模块;客户端的消息发布模块由数据采集模块、数据压缩模块和QoS发送模块B组成;客户端的数据采集模块与客户端的消息集、客户端的数据压缩模块、传感器、设备接口、数据总线等相连;数据采集模块从消息集读取消息定义,根据消息定义从传感器、设备接口、数据总线等取得数据信息,生成数据单元,将数据单元发送到客户端数据压缩模块;所述数据单元包含消息ID、QoS级别、消息定义以及消息定义中的所有字段的具体数据信息;客户端数据压缩模块与客户端的数据采集模块、客户端的QoS发送模块B相连,数据压缩模块从数据采集模块接收数据单元,对数据单元进行压缩,生成数据发布报文,将数据发布报文发送到QoS发送模块B;客户端的QoS发送模块B与客户端的数据压缩模块、消息代理的QoS接收模块A相连;QoS发送模块B在接收到数据压缩模块的数据发布报文后通过消息发布流程将数据发布报文发送到消息代理的QoS接收模块A;消息代理的消息代理模块由消息队列、订阅管理模块A、消息路由模块、QoS发送模块A和QoS接收模块A组成;消息代理的QoS接收模块A与客户端的QoS发送模块B、消息队列相连;消息代理的QoS接收模块A通过消息发布流程接收到客户端QoS发送模块B发布的消息发布报文后,将消息发布报文添加到消息队列;消息代理的消息队列与消息代理的QoS接收模块A、消息代理的消息路由模块相连;消息队列从QoS接收模块A接收数据发布报文,将数据发布报文进行存贮,供消息代理的消息路由模块读取;消息代理的消息路由模块与消息代理的消息队列、消息代理的订阅管理模块A、消息代理的QoS发送模块A相连;消息路由模块从消息队列读取数据发布报文,根据数据发布报文的主题从订阅管理模块A获取该主题的所有订阅者信息,将数据发布报文、订阅者信息发送给QoS发送模块A;消息代理的订阅管理模块A与客户端的消息订阅模块、消息代理的消息路由模块相连;一方面消息代理的订阅管理模块A从客户端消息订阅模块接收订阅报文,提取订阅信息,根据订阅信息创建订阅,将订阅加到订阅列表中,一个订阅由客户端ID、主题过滤器、服务质量QoS级别组成;订阅管理模块A完成订阅创建后向客户端消息订阅模块发送订阅确认报文;另一方面消息代理的订阅管理模块A在收到消息路由模块发送的请求订阅信息时根据主题在订阅列表中查找匹配主题过滤器对应的所有客户端ID,并将客户端信息返回给消息代理的消息路由模块;消息代理的QoS发送模块A与消息代理的消息路由模块、客户端的QoS接收模块B相连;QoS发送模块A从消息路由模块接收数据发布报文、订阅者信息,通过数据发布流程将数据发布报文发布到订阅者对应的客户端的QoS接收模块B;客户端的消息订阅模块由订阅管理模块B、数据解压模块和QoS接收模块B组成;客户端的订阅管理模块B与消息代理的订阅管理模块A相连;客户端的订阅管理模块B通过向订阅管理模块A发送订阅报文请求订阅,从订阅管理模块A接收响应的订阅确认报文,验证订阅状态;客户端的QoS接收模块B与消息代理的QoS发送模块A、数据解压模块相连;客户端的QoS接收模块B从QoS发送模块A接收消息发布报文,将数据发布报文发送给数据解压模块;客户端的数据解压模块与客户端的QoS接收模块B、客户端的消息集相连;从客户端的QoS接收模块B接收数据发布报文,根据数据发布报文的消息ID从消息集中读取对应的消息定义,根据消息定义将数据发布报文解压为数据单元,将数据单元提交给上层应用;客户端的消息集与客户端的数据采集模块、客户端的数据解压模块相连;消息集存贮消息定义,消息定义使用名称、ID、字段名称、类型和含义,以及它们的相互关系,来描述基于消息队列的轻量级数据采集系统中使用的各种消息;旨在满足各个具体场景下的数据采集需求;每个消息定义包含一个或多个字段,每个字段都有一个特定的数据类型和含义;消息定义包括消息ID、消息描述、消息字段、字段类型、字段名称、字段单位、枚举类型、描述;客户端的消息集供数据采集模块、数据解压模块读取;第二步:客户端与服务端的消息代理建立连接并进行身份认证;方法是:客户端按照2.1所述流程与消息代理建立连接,包括向消息代理发起网络连接,并向消息代理发送携带身份信息的连接请求报文,接收并处理消息代理返回的连接确认报文;同时消息代理按照2.2所述流程等待并处理客户端连接请求,包括接收客户端的连接请求报文,从连接请求报文提取连接请求信息进行认证,向客户端返回连接确认报文;具体方法是:2.1客户端与消息代理建立连接,方法是:2.1.1客户端的连接管理模块B向消息代理的连接管理模块A发送连接请求报文,连接请求报文包含连接请求信息,连接请求信息包含客户端的唯一标识符、用户名和密码;2.1.2客户端连接管理模块B等待接收消息代理连接管理模块A的连接确认报文并对连接确认报文进行验证,方法是:2.1.2.1如果客户端连接管理模块B在第一时间阈值T内没有收到连接确认报文,客户端关闭与服务端的网络连接,转步骤2.1.1;2.1.2.2如果连接确认报文中的连接返回码不为“0”即服务器消息代理拒绝连接请求,则客户端关闭与服务端的网络连接,转步骤2.1.1;2.1.2.3如果连接确认报文的连接返回码为“0”即服务器消息代理接受连接请求,接入成功,客户端与服务端消息代理的连接建立完成,客户端的连接管理模块B生成会话信息B,将会话信息B发送给会话管理模块B,若用户将该客户端用作数据订阅则客户端转第三步启动数据订阅功能;若用户将该客户端用作数据采集发布,则客户端转第四步启动数据发布功能;2.2服务端等待并处理客户端连接请求,方法是:2.2.1消息代理的连接管理模块A监听网络,等待客户端的连接管理模块B发送的连接请求报文;若收到客户端发送的连接请求报文,转步骤2.2.2;若未收到客户端发送的连接请求报文,转步骤2.2.1继续监听;2.2.2消息代理的连接管理模块A接收客户端程序连接管理模块B发送的连接请求报文,验证客户端的连接请求,并进行身份认证,方法是:2.2.2.1消息代理的连接管理模块A接收到客户端程序的连接管理模块B发送的连接请求报文,如果连接请求报文不合法,消息代理的连接管理模块A直接关闭与发送连接请求报文的客户端的网络连接,转步骤2.2.1;如果连接请求报文合法,提取客户端标识符、用户名和密码等客户端连接请求信息,将客户端连接请求信息发送给安全认证与授权模块,转步骤2.2.2.2;2.2.2.2安全认证与授权模块根据客户端标识符、用户名和密码对客户端进行身份验证和授权检查,将认证结果返回给连接管理模块A,如果认证成功则向连接管理模块A发送认证成功信息,转步骤2.2.2.3;否则,安全认证与授权模块向连接管理模块A发送认证失败信息,转2.2.2.5;2.2.2.3消息代理的连接管理模块A向客户端的连接管理模块B发送返回码为“0”的连接确认报文,并将会话信息A发送给会话管理模块A,转步骤2.2.2.4;2.2.2.4会话管理模块A根据会话信息A中的客户端标识符、认证成功信息和接入时间更新客户端接入状态信息,转步骤2.2.1;2.2.2.5连接管理模块A向客户端的连接管理模块B发送返回码不为“0”的连接确认报文,并且关闭与发送连接请求报文的客户端的网络连接,转步骤2.2.1;第三步:作为消息订阅者的客户端向消息代理注册对特定主题的关注,以便接收与这些主题相关的消息,完成主题订阅,方法是:作为消息订阅者的客户端按照3.1所述流程向消息代理发起主题订阅并验证订阅确认报文;同时消息代理按照3.2所述流程等待接收并验证订阅报文,进行客户端订阅并响应订阅确认报文;具体为:3.1作为消息订阅者的客户端发起主题订阅和验证订阅确认报文,方法是:3.1.1订阅管理模块B向消息代理订阅管理模块A发送订阅报文用于请求创建订阅,订阅报文应至少包含至少一组订阅信息,订阅信息为客户端ID、主题过滤器和QoS等级字段的组合;3.1.2订阅管理模块B等待并接收消息代理订阅管理模块A响应的订阅确认报文,订阅确认报文包含订阅报文中包含的所有订阅信息以及每组订阅信息对应的返回码,验证订阅状态,方法是:3.1.2.1如果订阅管理模块B在第二时间阈值T2内没有收到消息代理的订阅确认报文,转步骤3.1.1;3.1.2.2如果订阅管理模块B收到消息代理的订阅确认报文,从订阅确认报文提取订阅信息和每组订阅信息对应的返回码,订阅管理模块B使用订阅信息和对应的返回码更新当前订阅状态;若返回码为0、1或2,则订阅成功,转第四步;若返回码不是0、1、2中的任意一个,则订阅失败,转步骤3.1.1重新发起订阅请求;3.2消息代理等待接收并验证客户端的订阅请求,进行客户端订阅并响应订阅确认报文,方法是:3.2.1消息代理订阅管理模块A监听网络,等待客户端的订阅管理模块B发送的订阅报文;若收到客户端发送的订阅报文,转步骤3.2.2;若未收到客户端发送的订阅报文,转步骤3.2.1继续监听;3.2.2此时订阅管理模块A收到了客户端订阅管理模块B发送的订阅报文,验证订阅者的订阅请求,方法是:3.2.2.1订阅管理模块A验证订阅报文合法性,如果订阅报文不合法,转步骤3.2.1;如果订阅报文合法,从订阅报文提取订阅信息,转步骤3.2.2.2;3.2.2.2订阅管理模块A使用订阅信息中的客户端ID、主题过滤器和QoS等级字段创建新的订阅,将新的订阅添加到订阅列表中;转步骤3.2.2.3;3.2.2.3订阅管理模块A向订阅管理模块B发送订阅确认报文,订阅确认报文包含订阅者订阅管理模块B发送的订阅报文中的所有订阅信息及每组订阅信息对应的一个返回码;返回码为该订阅的QoS等级,表示该订阅在消息代理中被授予的最大QoS等级,返回码为支持的QoS等级以外的值表示这个订阅失败;转步骤3.2.1;第四步:作为数据发布者的客户端采集数据,并通过消息代理发布消息到各个订阅者,完成数据发布;方法是:作为数据发布者的客户端按照4.1所述流程进行数据采集、编码压缩并发布到消息代理;同时消息代理开启两个线程,线程1按照4.2所述流程接收作为数据发布者的客户端发布的数据发布报文,将数据发布报文添加到消息队列;线程2按照4.3所述流程从消息队列取出数据发布报文,根据主题信息将数据发布报文分发给订阅了相应主题的订阅者;同时作为消息订阅者的客户端按照4.4所述流程接收消息代理分发的数据发布报文;具体为:4.1作为数据发布者的客户端进行数据采集、编码压缩并发布到消息代理,方法是:4.1.1作为数据发布者的客户端的数据采集模块根据需要发布的信息,从消息集读取对应的消息定义,并根据消息定义从发布者硬件设备上的传感器、设备接口、数据总线获取具体数据,然后根据需要发布的信息的可靠性要求为其分配QoS级别,QoS级别共有0、1、2三个等级;并设置消息主题,生成一个数据单元;数据单元包含消息ID、QoS级别、消息定义以及消息定义中的所有字段的具体数据信息;数据采集模块将数据单元发送到作为数据发布者的客户端的数据压缩模块;4.1.2作为数据发布者的客户端的数据压缩模块对数据单元进行编码压缩,构造数据发布报文,方法是:4.1.2.1构造数据发布报文消息头部:首先创建一个长度为8字节的空字符串,作为数据发布报文的报文头部,然后填充消息头部的各个字段,包括序列号、节点标识符、消息ID和QoS等级,报文长度暂时不做填充;4.1.2.2在数据发布报文消息头部后添加主题:将消息主题编码为UTF-8格式的字符串;将编码后的主题字段添加到数据发布报文头部之后;4.1.2.3在数据发布报文的主题字段后添加消息负载:消息负载包含消息定义中定义的所有字段,按消息定义中消息字段顺序枚举消息字段,并根据消息字段的字段类型将具体数据添加到数据发布报文之后,并对部分字段类型进行压缩编码,具体方法如下:4.1.2.3.1初始化变量x为1,令消息定义中字段的总数为X;4.1.2.3.3.2如果第x个字段对应的具体数据的值是大于7位的整数,Varint将整数分成若干个7位的部分,每个部分的最高位用来标识是否还有后续字节,其余的7位用来表示整数的值,转步骤4.1.2.3.2。4.1.2.3.3使用Varint对整数进行编码,方法如下:4.1.2.3.3.1如果第x个字段对应的具体数据的值是7位的整数,直接将这7位作为编码结果,转步骤4.1.2.3.2;4.1.2.3.3.2如果第x个字段对应的具体数据的值是大于7位的整数,Varint将整数分成若干个7位的部分,每个部分的最高位用来标识是否还有后续字节,其余的7位用来表示整数的值,转步骤4.1.2.3.2;4.1.2.3.4使用消息定义中第x个字段类型定义的类型添加字段到数据发布报文之后,转步骤4.1.2.3.2;4.1.2.4为数据发布报文填充报文长度字段:报文长度为当前构造的数据发布报文长度加上2字节的校验和长度,在数据发布报文的报文长度位置更新报文长度字段;4.1.2.5为数据发布报文添加检验和:使用CRC校验算法计算数据发布报文的校验和,并将校验和添加到数据发布报文最后。数据发布报文包括报文长度2字节、序列号2字节、节点标识符2字节、消息ID14位、QoS等级2位、主题、消息负载、校验和2字节,将数据发布报文发送到作为数据发布者的客户端的QoS发送模块B,转步骤4.1.3;4.1.3作为数据发布者的客户端采用数据发布方法按照不同的QoS等级以频率f将数据发布报文发布到消息代理;此时作为数据发布者的客户端QoS发送模块B为发送者,消息代理QoS接收模块A作为接收者;数据发布方法是:4.1.3.1若数据发布报文的QoS等级为0,则发送者对数据发布报文进行“最多一次”传输:发送者完成向接收者发送数据发布报文即完成QoS0消息发布流程,转步骤4.1.1;4.1.3.2若数据发布报文的QoS等级为1,则发送者对数据发布报文进行“至少一次”传输,即进行QoS1消息发布,转步骤4.1.1开始下一轮信息采集发布;4.1.3.3若数据发布报文的QoS等级为2,则发送者对数据发布报文进行“恰好一次”传输,即完成QoS2发布流程,转步骤4.1.1等待开始下一轮信息采集发布;4.2消息代理采用数据接收方法接收数据发布者发布的数据发布报文,并将报文添加到消息队列中;此时作为数据发布者的客户端QoS发送模块B为发送者,消息代理QoS接收模块A作为接收者;数据接收方法是:4.2.1接收者等待接收发送者发送的数据发布报文,并根据QoS等级进行不同的处理和响应,方法是:4.2.1.1若接收到的数据发布报文QoS等级为0,QoS0数据发布接收完成,添加数据发布报文到消息队列,转步骤4.2.1继续接收数据发布报文;4.2.1.2若接收到的数据发布报文QoS等级为1,处理并响应发布确认报文,方法是:4.2.1.2.1向发送者回复发布确认报文,发布确认报文的报文ID与数据发布报文的报文ID相同;4.2.1.2.1QoS1数据接收完成后,添加数据发布报文到消息队列,转步骤4.2.1继续接收数据发布报文;4.2.1.3若接收到的数据发布报文QoS等级为2,处理并进行响应,方法是:4.2.1.3.1记录数据发布报文的消息ID,向发送者回复发布收到报文,发布收到报文的报文ID与数据发布报文的报文ID相同;4.2.1.3.2接收者等待接收发送者发送的发布释放报文,若发送者收到发送者发送的发布释放报文,转4.2.1.3.3,若发送者在T2内未接收到发布释放报文,转4.2.1.3.1,重新发送发布收到报文;4.2.1.3.3接收者接收到发布释放报文,确认在这一次的传输流程中不会再有重传的消息报文到达,向发送者回复发布完成报文表示接收方也准备好将当前的报文ID用于新的消息了,转步骤4.2.1.3.4;4.2.1.3.4QoS2数据接收完成后,添加数据发布报文到消息队列,转步骤4.2.1.2继续接收数据发布报文;4.3消息代理从消息队列取出数据发布报文,根据主题信息将数据发布报文分发给订阅了相应主题的订阅者,方法是:4.3.1若消息队列为空,转步骤4.3.1;否则消息代理的消息路由模块从消息队列中取出一条数据发布报文,根据数据发布报文的主题到消息代理的订阅管理模块A查找订阅列表,获取订阅了该主题数据的所有订阅者,并将数据发布报文和订阅者信息传递给消息代理的QoS发送模块A,转到步骤4.3.2;4.3.2消息代理的QoS发送模块A从消息路由模块接收数据发布报文与订阅者信息,依据数据发布报文的QoS等级采用步骤4.1.3所述的数据发布方法按照不同的QoS等级发布数据发布报文到数据订阅者QoS接收模块B,此时消息代理QoS发送模块A作为发送者,数据订阅者QoS接收模块B作为接收者;转步骤4.3.1继续分发消息队列中的下一条数据发布报文;4.4作为数据订阅者的客户端接收并处理数据发布报文,方法是:4.4.1作为数据订阅者的客户端的QoS接收模块B按照步骤4.2所述的数据接收方法接收消息代理的QoS发送模块A发布的数据发布报文,并在接收完成后将数据发布报文发送到数据解压模块,转步骤4.4.2;若未接收到消息代理的QoS发送模块A发布的数据发布报文,转4.4.1;4.4.2数据解压模块从QoS接收模块B接收数据发布报文,从数据发布报文中提取消息ID、消息负载,根据消息ID从消息集中获取消息定义,根据消息定义中各字段的类型和顺序,依次处理并恢复每个字段的原始数据;同时对经过压缩处理的字段进行解压;,方法是:4.4.2.1初始化变量x为1,设定消息定义中字段的总数为X;4.4.2.2对变量x进行检查,如果xX,则表示消息负载解码完成,转步骤4.4.3。如果x≤X,判断字段类型并处理:如果第x个字段类型为整数,令x=x+1,转步骤4.4.2.3。如果第x个字段类型为其他类型,令x=x+1,转步骤4.4.2.4。4.4.2.3对于整数字段类型,采用Varint解码方法进行解压,解压完毕转步骤4.4.2.2继续解压剩余字段;4.4.2.4对于其他类型的字段,根据消息定义中指定的类型直接从消息负载中提取并恢复字段,完成后转步骤4.4.2.2继续解压剩余字段;4.4.3完成数据解压后,使用消息定义、消息定义中字段对应的具体数据组成数据单元;将数据单元发送给上层应用,至此数据采集流程完成,结束。

全文数据:

权利要求:

百度查询: 中国人民解放军国防科技大学 一种基于消息队列的轻量级数据采集方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。

相关技术
相关技术
相关技术
相关技术