一种消息处理方法、装置、设备及介质与流程
本发明涉及信息处理,特别是涉及一种消息处理方法、装置、设备及介质。
背景技术:
1、随着系统互联互通需求的激增,一个系统(如中心平台)往往需要与很多种不同类型的终端或子系统进行数据交互。这些交互方使用的消息格式(协议)千差万别,主要体现在:
2、(1)、帧结构差异:字节序(大端/小端)、位序、起始/结束标识符、长度字段定义、校验算法(crc(cyclic redundancy check,循环冗余校验)、累加和等)不同。
3、(2)、消息正文结构差异:数据元素的类型(整数、浮点数、字符串)、长度(定长/变长)、排列顺序、嵌套关系、条件出现(可选字段)、重复出现(集合)规则不同。
4、(3)、语义映射复杂:不同协议中对同一业务概念的字段命名、编码方式(如状态码枚举值)、单位(如公里/英里)不同,需要进行复杂的转换。
5、目前,业界针对上述问题的解决方案主要分为以下几类,但均存在不足:
6、(1)、硬编码方式:
7、为每一种需要处理的消息格式编写专用的解析与转换代码(java类、c结构体等)。缺点如下:
8、开发效率极低:每新增一种协议,都需要开发、测试、上线一套新代码,周期长。
9、维护成本高昂:协议格式一旦变更,必须找到对应代码进行修改、重新编译和部署,容易出错。
10、灵活性差:无法在运行时动态支持新协议,系统僵化。
11、技术栈绑定:代码与特定编程语言深度耦合,不易移植。
12、(2)、基于xml/xsd(extensible markup language,可扩展标记语言)/(xmlschema definition,可扩展标记语言架构)或自定义描述文件的解析方式:
13、使用xml schema(xsd)或自定义的文本文件来描述消息格式,通过通用解析器读取描述文件来驱动解析过程。缺点如下:
14、表达效率低:对复杂的条件字段、变长字段组、依赖其他字段的动态长度等场景,需要编写大量冗余的xml schema定义,表达过程繁琐、可读性差,且难以维护。
15、性能瓶颈:xml解析本身开销大,且运行时解释执行描述逻辑(非编译执行),效率较低,难以满足高频交易或海量物联网数据的处理需求。
16、转换支持弱:此类方案通常聚焦于解析,对于复杂、可配置的消息格式转换支持不足,往往仍需编码实现转换逻辑。
17、(3)、通用序列化框架:
18、如protocol buffers、apache thrift、avro等。它们提供idl(interfacedescription language,接口描述语言),可自动生成多语言代码,用于序列化/反序列化。缺点如下:
19、强侵入性:要求通信双方都必须采用相同的idl和生成的代码,不适用于需要与大量已有、不可更改的第三方私有协议对接的场景。
20、动态性不足:虽然生成代码性能高,但协议变更仍需重新生成和部署代码,不具备运行时动态更新能力。
21、转换非核心功能:它们核心解决的是结构化数据的编解码,而非专注于异构格式间的映射与转换。
22、(4)、基于规则引擎的etl(extraction transformation loading,提取、转换和加载)工具:
23、部分企业级集成平台或etl工具提供图形化配置界面,通过拖拽方式配置数据映射和转换规则。缺点如下:
24、笨重复杂:通常是大型套件的一部分,部署和运维成本高。
25、性能通常不适用于通信层:设计目标多为批处理或企业应用集成,难以满足通信协议处理所需的低延迟、高并发要求。
26、对二进制协议支持不佳:更擅长处理文本(如csv(comma-separated values,逗号分隔值)、xml、json(javascript object notation,一种轻量级的数据交换格式)或半结构化数据,对字节级操作的二进制协议支持较弱。
27、可见,如何实现兼顾灵活性、高性能、强描述能力和动态更新能力的统一消息解析与转换,是本领域技术人员需要解决的问题。
技术实现思路
1、本发明实施例的目的是提供一种消息处理方法、装置、设备及介质,可以实现每条消息的解析与转换的零反射调用,实现强大的描述能力,支持灵活、高效的消息转换。其具体方案如下:
2、第一方面,本发明公开了一种消息处理方法,包括:
3、根据待处理消息特征确定待处理消息对应的帧结构模板id,基于预先构建的全局注册表确定帧结构模板id对应的帧解析器实例;全局注册表为用于存储模板id与解析器/转换器实例的映射关系的表;
4、通过调用帧解析器实例的parse方法提取消息id,确定消息id对应的预设的正文格式模板,基于预设的全局注册表确定预设的正文格式模板对应的正文解析器实例;
5、通过调用正文解析器实例的parse方法得到相应的源消息实体,基于预设的转换映射模板以及源消息实体确定目标消息实体;
6、通过正文解析器实例调用编码方法对目标消息实体进行编码,输出相应的编码后数据,以完成消息处理。
7、可选的,基于预先构建的全局注册表确定帧结构模板id对应的帧解析器实例之前,还包括:
8、通过变更监听器监听到目标目录中存在模板文件时,读取模板文件,并向预设模板编译管理器发送目标通知;模板文件为运维人员预先创建好的json文件;模板文件包括用于描述消息头的帧结构模板、用于描述消息体的正文格式模板、用于描述消息格式之间的映射规则的转换规则模板以及用于描述需要转换格式的消息id的转换映射模板;
9、通过预设模板编译管理器基于目标通知读取模板文件中的各字段,基于相应的字段生成java源代码;
10、调用预设编译器将java源代码编译为字节码;
11、创建用于加载字节码的目标类加载器,通过预设模板编译管理器将字节码发送至目标类加载器,以便目标类加载器自动实例化解析器/转换器实例;
12、通过预设模板编译管理器将解析器/转换器实例以及解析器/转换器实例对应的模板id注册至全局注册表,以完成全局注册表的构建。
13、可选的,消息处理方法,还包括:
14、将模板文件持久化存储至预设模板存储库。
15、可选的,消息处理方法,还包括:
16、若模板变更监听器监听到预设模板存储库中的模板文件变更,则读取变更后的模板内容,将相应的新模板id以及新模板内容发送至预设模板编译管理器;
17、通过预设模板编译管理器对新模板id以及新模板内容对应的java源代码进行编译,以得到新的字节码;
18、创建用于加载新的字节码的新类加载器,通过预设模板编译管理器将字节码发送至新类加载器,以便新类加载器自动实例化新解析器/转换器实例;
19、通过预设模板编译管理器将新解析器/转换器实例注册至全局注册表,通过原子操作将全局注册表中当前使用的实例映射更新为解析器/转换器实例。
20、可选的,基于预设的转换映射模板以及源消息实体确定目标消息实体,包括:
21、基于转换映射模板判断源消息实体是否需要转换为目标格式;
22、若是,则基于转换映射模板从全局注册表中获取相应的目标转换器实例;
23、基于源消息实体调用目标转换器实例的convert方法,以得到目标消息实体。
24、可选的,消息处理方法,还包括:
25、在目标时间段内,若旧实例以及旧类加载器未被任何线程调用,则直接对旧实例以及旧类加载器进行回收清理。
26、可选的,通过正文解析器实例调用编码方法对目标消息实体进行编码,输出相应的编码后数据,包括:
27、通过正文解析器实例基于目标消息实体调用编码方法,以得到载荷字节数组;
28、基于帧解析器实例对应的编码方法在载荷字节数组中写入起始标志、长度以及校验信息,以得到编码后数据。
29、第二方面,本发明公开了一种消息处理装置,包括:
30、帧解析器实例确定模块,用于根据待处理消息特征确定待处理消息对应的帧结构模板id,基于预先构建的全局注册表确定帧结构模板id对应的帧解析器实例;全局注册表为用于存储模板id与解析器/转换器实例的映射关系的表;
31、正文解析器实例确定模块,用于通过调用帧解析器实例的parse方法提取消息id,确定消息id对应的预设的正文格式模板,基于预设的全局注册表确定预设的正文格式模板对应的正文解析器实例;
32、目标消息实体确定模块,用于通过调用正文解析器实例的parse方法得到相应的源消息实体,基于预设的转换映射模板以及源消息实体确定目标消息实体;
33、编码模块,用于通过正文解析器实例调用编码方法对目标消息实体进行编码,输出相应的编码后数据,以完成消息处理。
34、第三方面,本发明公开了一种电子设备,包括:
35、存储器,用于存储计算机程序;
36、处理器,用于执行计算机程序以实现如前述消息处理方法的步骤。
37、第四方面,本发明公开了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如前述消息处理方法的步骤。
38、本发明根据待处理消息特征确定待处理消息对应的帧结构模板id,基于预先构建的全局注册表确定帧结构模板id对应的帧解析器实例;全局注册表为用于存储模板id与解析器/转换器实例的映射关系的表;通过调用帧解析器实例的parse方法提取消息id,确定消息id对应的预设的正文格式模板,基于预设的全局注册表确定预设的正文格式模板对应的正文解析器实例;通过调用正文解析器实例的parse方法得到相应的源消息实体,基于预设的转换映射模板以及源消息实体确定目标消息实体;通过正文解析器实例调用编码方法对目标消息实体进行编码,输出相应的编码后数据,以完成消息处理。
39、有益效果:可见,本发明通过模板声明式地定义消息的帧结构、正文格式以及格式间的转换规则。系统在运行时动态将这些模板编译成标准的字节码。实现了每条消息的解析与转换的零反射调用。彻底消除了传统配置化方案在消息处理热路径上的解释和反射开销。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com