一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于Protobuf协议动态解析的消息发送方法与流程

2021-12-04 13:13:00 来源:中国专利 TAG:

基于protobuf协议动态解析的消息发送方法
技术领域
1.本发明涉及开发测试技术领域,尤其涉及一种基于protobuf协议动态解析的消息发送方法、装置、存储介质及计算机设备。


背景技术:

2.kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做mq系统),常见可以用于web/nginx日志、访问日志,消息服务等。
3.目前,使用kafka消息发送工具模拟消息发送时,不支持protobuf协议数据的消息发送,若使用protobuf协议的kafka消息,开发测试人员则需要人为编写脚本实现,而每次针对一份protobuf协议文件的数据,就需要人为开发实现一次,将明文数据转换成新的protobuf协议消息数据写入kafka集群,该过程耗费人力极大,且工作效率较低。


技术实现要素:

4.本发明的目的旨在至少能解决上述的技术缺陷之一,特别是现有技术中使用kafka消息发送工具模拟消息发送时,不支持protobuf协议数据的消息发送的技术缺陷。
5.本发明提供了一种基于protobuf协议动态解析的消息发送方法,所述方法包括:
6.接收前端页面发送的模拟动作流数据,所述模拟动作流数据包括kafka消息数据和预先约定的protobuf协议文件描述内容;所述kafka消息数据为依据所述protobuf协议文件描述内容编写的json格式的消息数据;
7.基于所述protobuf协议文件描述内容对所述kafka消息数据进行动态解析,得到二进制数组类型消息;
8.将所述二进制数组类型消息发送到kafka集群中,以使消费者通过所述kafka集群订阅所述二进制数组类型消息。
9.可选地,所述基于所述protobuf协议文件描述内容对所述kafka消息数据进行动态解析,得到二进制数组类型消息的步骤,包括:
10.基于所述protobuf协议文件描述内容构造相应的动态消息类;
11.基于所述动态消息类对所述对所述kafka消息数据进行动态解析,得到二进制数组类型消息。
12.可选地,所述基于所述protobuf协议文件描述内容构造相应的动态消息类的步骤,包括:
13.将所述protobuf协议文件描述内容写入proto文件中,得到描述文件;
14.基于所述描述文件生成descriptor文件,所述descriptor文件为二进制文件;
15.基于所述descriptor文件构造相应的动态消息类。
16.可选地,所述基于所述描述文件生成descriptor文件的步骤,包括:
17.利用protoc可执行文件对所述描述文件执行文件生成指令,得到对应的descriptor文件。
18.可选地,所述模拟动作流数据还包括kafka集群节点信息和kafka集群topic信息;
19.所述kafka集群节点信息和所述kafka集群topic信息用于创建kafka消息生产者。
20.可选地,所述将所述二进制数组类型消息发送到kafka集群中的步骤之前,还包括:
21.接收所述前端页面发送的kafka集群节点信息和kafka集群topic信息;
22.基于所述kafka集群节点信息和所述kafka集群topic信息创建kafka消息生产者。
23.可选地,所述将所述二进制数组类型消息发送到kafka集群中的步骤,包括:
24.将所述二进制数组类型消息发送到所述kafka消息生产者;
25.基于所述kafka消息生产者将所述二进制数组类型消息发送到kafka集群中。
26.本发明还提供了一种基于protobuf协议动态解析的消息发送装置,包括:
27.数据接收模块,用于接收前端页面发送的模拟动作流数据,所述模拟动作流数据包括kafka消息数据和预先约定的protobuf协议文件描述内容;所述kafka消息数据为依据所述protobuf协议文件描述内容编写的json格式的消息数据;
28.动态解析模块,用于基于所述protobuf协议文件描述内容对所述kafka消息数据进行动态解析,得到二进制数组类型消息;
29.消息发送模块,用于将所述二进制数组类型消息发送到kafka集群中,以使消费者通过所述kafka集群订阅所述二进制数组类型消息。
30.本发明还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述基于protobuf协议动态解析的消息发送方法的步骤。
31.本发明还提供了一种计算机设备,所述计算机设备中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述基于protobuf协议动态解析的消息发送方法的步骤。
32.从以上技术方案可以看出,本发明实施例具有以下优点:
33.本发明提供的一种基于protobuf协议动态解析的消息发送方法,使用kafka消息发送工具模拟消息发送时,测试人员可通过前端页面发送kafka消息数据和预先约定的protobuf协议文件描述内容至后端,以使后端基于预先约定的protobuf协议文件描述内容对kafka消息数据进行动态解析,得到二进制数组类型消息,该过程不仅节省了人力成本,还节约了时间成本,并且将该二进制数组类型消息发送至kafka集群后,消费者可通过kafka集群订阅二进制数组类型消息,有效地提升了测试效率。
附图说明
34.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
35.图1为本发明实施例提供的一种基于protobuf协议动态解析的消息发送方法的流程示意图;
36.图2为本发明实施例提供的前端页面的结构示意图;
37.图3为本发明实施例提供的系统原理图;
38.图4为本发明实施例提供的创建kafka消息生产者的流程示意图;
39.图5为本发明实施例提供的一种基于protobuf协议动态解析的消息发送装置的结构示意图;
40.图6为本发明实施例提供的一种计算机设备的内部结构示意图。
具体实施方式
41.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做mq系统),常见可以用于web/nginx日志、访问日志,消息服务等。
43.目前,使用kafka消息发送工具模拟消息发送时,不支持protobuf协议数据的消息发送,若使用protobuf协议的kafka消息,开发测试人员则需要人为编写脚本实现,而每次针对一份protobuf协议文件的数据,就需要人为开发实现一次,将明文数据转换成新的protobuf协议消息数据写入kafka集群,该过程耗费人力极大,且工作效率较低。
44.因此,本发明的目的是解决现有技术中使用kafka消息发送工具模拟消息发送时,不支持protobuf协议数据的消息发送的技术问题,并提出以下技术方案:
45.在一个实施例中,如图1所示,图1为本发明实施例提供的一种基于protobuf协议动态解析的消息发送方法的流程示意图;本发明提供了一种基于protobuf协议动态解析的消息发送方法,具体包括如下步骤:
46.s110:接收前端页面发送的模拟动作流数据。
47.本步骤中,kafka消息发送工具主要使用pb协议来模拟消息发送,在发送消息前,首先通过前端页面的输入入口输入相关的kafka消息数据以及预先约定的protobuf协议文件描述内容,以便利用protobuf协议文件描述内容对kafka消息数据进行动态解析。
48.可以理解的是,这里的protobuf协议文件描述内容是依据数据生产方和消费方事先约定好的protobuf协议进行编写后得到;例如,protobuf协议文件描述内容中可以定义用户在浏览器的相关页面中的点击事件。
49.这里的kafka消息数据为依据protobuf协议文件描述内容编写的json格式的消息数据,在模拟动作流数据的时候,测试人员只需要模拟json格式的kafka消息数据,kafka消息发送工具则会根据固定的protobuf协议文件描述内容对明文进行转换。
50.s120:基于protobuf协议文件描述内容对kafka消息数据进行动态解析,得到二进制数组类型消息。
51.本步骤中,通过步骤s110接收前端页面发送的模拟动作流数据后,可以基于预先约定的protobuf协议文件描述内容对kafka消息数据进行动态解析,从而得到二进制数组类型消息。
52.可以理解的是,protobuf为结构化数据格式标准,提供序列化和反序列方法,用于存储和交换,可通过.proto文件生成对应语言的类代码。而在使用pb协议发送消息时,若每
次pb协议文件修改后都需要重新生成协议代码文件,并重新部署工具服务应用才可正常序列化及反序列化读写数据的话,则会导致工作效率较低。
53.因而,本技术利用protobuf提供的动态解析机制来对kafka消息数据进行动态解析,该过程可以根据实际业务的多样性而制定的protobuf协议文件,动态调整生成protobuf协议描述文件,接着利用protobuf协议描述文件中的的protobuf协议文件描述内容对json格式的kafka消息数据进行动态解析,从而将kafka消息数据动态转换成protobuf协议数据,即本技术中的二进制数组类型消息。
54.s130:将二进制数组类型消息发送到kafka集群中。
55.本步骤中,通过步骤s120得到对应的二进制数组类型消息后,可以将该二进制数组类型发送到kafka集群中,以使消费者通过kafka集群订阅二进制数组类型消息。
56.可以理解的是,kafka是一种高吞吐量的分布式发布

订阅消息系统,它可以处理消费者在网站中的所有动作流数据。kafka集群包含一个或多个服务器节点,每条发布到kafka集群的消息都有一个类别,这个类别称为topic,其实就是将消息按照topic来分类,topic是逻辑上的分类,同一个topic的数据既可以在同一个服务器节点上也可以在不同的服务器节点上。
57.在发布

订阅消息系统中,消息被持久化到一个topic中。与点对点消息系统不同的是,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在发布

订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。
58.因此,本技术将kafka消息数据动态转换成protobuf协议数据后得到的二进制数组类型消息发送至kafka集群中,这样,订阅者即可接收到该二进制数组类型消息。
59.上述实施例中,使用kafka消息发送工具模拟消息发送时,测试人员可通过前端页面发送kafka消息数据和预先约定的protobuf协议文件描述内容至后端,以使后端基于预先约定的protobuf协议文件描述内容对kafka消息数据进行动态解析,得到二进制数组类型消息,该过程不仅节省了人力成本,还节约了时间成本,并且将该二进制数组类型消息发送至kafka集群后,消费者可通过kafka集群订阅二进制数组类型消息,有效地提升了测试效率。
60.上述实施例对本技术中基于protobuf协议动态解析的kafka消息发送方法进行展开描述,下面将对本技术中如何基于protobuf协议文件描述内容对kafka消息数据进行动态解析的过程进行说明。
61.在一个实施例中,步骤s120中基于所述protobuf协议文件描述内容对所述kafka消息数据进行动态解析,得到二进制数组类型消息的步骤,可以包括:
62.s121:基于所述protobuf协议文件描述内容构造相应的动态消息类。
63.s122:基于所述动态消息类对所述对所述kafka消息数据进行动态解析,得到二进制数组类型消息。
64.本实施例中,使用protobuf的动态解析机制来处理kafka消息数据时,消费者无需根据proto文件编译生成的类来反序列化消息,而是通过proto文件生成的descriptor来构造动态消息类,然后反序列化(解析)消息。
65.因此,本技术在对kafka消息数据进行动态解析之前,可以基于protobuf协议文件描述内容来构造相应的动态消息类,以便通过该动态消息类来对kafka消息数据进行动态解析,以此来获得二进制数组类型消息。
66.上述实施例对本技术中如何基于protobuf协议文件描述内容对kafka消息数据进行动态解析的过程进行说明,下面将对本技术中如何基于protobuf协议文件描述内容构造相应的动态消息类的过程进行解释说明。
67.在一个实施例中,步骤s121中基于所述protobuf协议文件描述内容构造相应的动态消息类的步骤,可以包括:
68.s210:将所述protobuf协议文件描述内容写入proto文件中,得到描述文件。
69.s211:基于所述描述文件生成descriptor文件,所述descriptor文件为二进制文件。
70.s212:基于所述descriptor文件构造相应的动态消息类。
71.本实施例中,后端依据protobuf协议文件描述内容构造相应的动态消息类之前,可以新建一个临时文件,并保证该临时文件中的输入内容非空,且协议内容格式正确。
72.接着将protobuf协议文件描述内容写入.proto格式的文件,即本技术中的proto文件,得到描述文件后,可以根据该描述文件中的描述内容来生成descriptor文件,然后依据descriptor文件来构造相应的动态消息类。
73.可以理解的是,本技术在构造动态消息类时,首先将protobuf协议文件描述内容写入.proto格式的文件中,从而获得pbmessage对象,接着利用pbmessage对象获得descriptors.descriptor对象,有了descriptors.descriptor对象后,就可以创建dynamicmessage对象,即本技术中的动态消息类,而有了动态消息类,就可以解析对应的请求。
74.本实施例利用protobuf的动态解析机制来处理kafka消息数据,生产者和消费者实现了解耦,消费者不再强依赖原始生产者生成消息数据,可以通过本发明的kafka消息造数工具生成模拟的消息数据,并使用proto文件生成的descriptor文件来构造dynamicmessage类,通过dynamicmessage类来解析测试人员编写的json格式消息数据,进而转换成二进制数组类型的最终的生产者消息数据集,以此来提高测试效率。
75.上述实施例对本技术中如何基于protobuf协议文件描述内容构造相应的动态消息类的过程进行解释说明,下面将对本技术中如何基于描述文件生成descriptor文件的过程进行说明。
76.在一个实施例中,步骤s211中基于所述描述文件生成descriptor文件的步骤,可以包括:利用protoc可执行文件对所述描述文件执行文件生成指令,得到对应的descriptor文件。
77.本实施例中,在基于描述文件生成descriptor文件时,可以利用protoc可执行文件在服务器中对描述文件执行“protoc
‑‑
descriptor_set_out=$outputpath”命令来生成descriptor文件。
78.上述实施例对本技术中如何基于描述文件生成descriptor文件的过程进行说明,下面将对本技术中的模拟动作数据进行进一步说明。
79.在一个实施例中,如图2所示,图2为本发明实施例提供的前端页面的结构示意图;
所述模拟动作流数据还可以包括kafka集群节点信息和kafka集群topic信息;所述kafka集群节点信息和所述kafka集群topic信息用于创建kafka消息生产者。
80.本实施例中,如图2所示,前端页面中提供kafka集群topic信息及kafka集群节点信息的输入入口,json格式的kafka消息数据内容输入入口和protobuf协议文件描述内容输入入口。当填写好相关信息后,点击消息发送按钮,即可将上述信息作为参数请求后端发送消息接口。
81.可以理解的是,这里在提供kafka集群topic信息及kafka集群节点信息时,主要是依据kafka消息生产方已配置好的kafka集群的topic和其对应的集群节点。
82.上述实施例对本技术中的模拟动作数据进行进一步说明,下面将对如何运用kafka集群节点信息和kafka集群topic信息的过程进行说明。
83.在一个实施例中,如图3所示,图3为本发明实施例提供的系统原理图;步骤s130中将所述二进制数组类型消息发送到kafka集群中的步骤之前,还可以包括:
84.s131:接收所述前端页面发送的kafka集群节点信息和kafka集群topic信息。
85.s132:基于所述kafka集群节点信息和所述kafka集群topic信息创建kafka消息生产者。
86.本实施例中,如图3所示,当测试人员在前端页面输入kafka消息数据时,还可以输入kafka集群节点信息和kafka集群topic信息,主应用入口接收到pb协议内容,即protobuf协议文件描述内容,造数内容,即json格式的kafka消息数据,以及kafka集群节点和kafka集群topic后,将其发送到后端,后端利用kafka集群节点信息和kafka集群topic信息来创建kafka消息发送者,即kafka消息生产者,并通过kafka消息生产者来发送消息。
87.可以理解的是,在发布

订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者,发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。
88.在一个实施例中,如图4所示,图4为本发明实施例提供的创建kafka消息生产者的流程示意图;步骤s130中将所述二进制数组类型消息发送到kafka集群中的步骤,可以包括:
89.s131:将所述二进制数组类型消息发送到所述kafka消息生产者。
90.s132:基于所述kafka消息生产者将所述二进制数组类型消息发送到kafka集群中。
91.本实施例中,如图4所示,本技术利用protobuf提供的动态解析机制来对kafka消息数据进行动态解析,该过程可以根据实际业务的多样性而制定的protobuf协议文件,动态调整生成protobuf协议描述文件,接着利用protobuf协议描述文件中的的protobuf协议文件描述内容对json格式的kafka消息数据进行动态解析,从而将kafka消息数据动态转换成protobuf协议数据,即本技术中的二进制数组类型消息,得到的二进制数组类型消息可以通过事先创建的kafka消息生产者,将二进制数组类型消息发送到kafka集群中,以便消费者通过kafka集群订阅二进制数组类型消息。
92.下面对本技术实施例提供的基于protobuf协议动态解析的kafka消息发送装置进行描述,下文描述的基于protobuf协议动态解析的kafka消息发送装置与上文描述的基于protobuf协议动态解析的kafka消息发送方法可相互对应参照。
93.在一个实施例中,如图5所示,图5为本发明实施例提供的一种基于protobuf协议
动态解析的消息发送装置的结构示意图;本发明还提供了一种基于protobuf协议动态解析的消息发送装置,包括数据接收模块210、动态解析模块220、消息发送模块230,具体包括如下:
94.数据接收模块210,用于接收前端页面发送的模拟动作流数据,所述模拟动作流数据包括kafka消息数据和预先约定的protobuf协议文件描述内容;所述kafka消息数据为依据所述protobuf协议文件描述内容编写的json格式的消息数据。
95.动态解析模块220,用于基于所述protobuf协议文件描述内容对所述kafka消息数据进行动态解析,得到二进制数组类型消息。
96.消息发送模块230,用于将所述二进制数组类型消息发送到kafka集群中,以使消费者通过所述kafka集群订阅所述二进制数组类型消息。
97.上述实施例中,使用kafka消息发送工具模拟消息发送时,测试人员可通过前端页面发送kafka消息数据和预先约定的protobuf协议文件描述内容至后端,以使后端基于预先约定的protobuf协议文件描述内容对json格式的kafka消息数据进行动态解析,得到二进制数组类型消息,该过程不仅节省了人力成本,还节约了时间成本,并且将该二进制数组类型消息发送至kafka集群后,消费者可通过kafka集群订阅二进制数组类型消息,有效地提升了测试效率。
98.在一个实施例中,所述动态解析模块220可以包括:
99.构造模块,用于基于所述protobuf协议文件描述内容构造相应的动态消息类。
100.解析模块,用于基于所述动态消息类对所述对所述kafka消息数据进行动态解析,得到二进制数组类型消息。
101.在一个实施例中,所述构造模块可以包括:
102.写入模块,用于将所述protobuf协议文件描述内容写入proto文件中,得到描述文件。
103.文件生成模块,用于基于所述描述文件生成descriptor文件,所述descriptor文件为二进制文件。
104.确定模块,用于基于所述descriptor文件构造相应的动态消息类。
105.在一个实施例中,所述文件生成模块可以包括:
106.命令执行模块,用于利用protoc可执行文件对所述描述文件执行文件生成指令,得到对应的descriptor文件。
107.在一个实施例中,所述模拟动作流数据还可以包括kafka集群节点信息和kafka集群topic信息;所述kafka集群节点信息和所述kafka集群topic信息用于创建kafka消息生产者。
108.在一个实施例中,所述消息发送模块230之前,还可以包括:
109.信息接收模块,用于接收所述前端页面发送的kafka集群节点信息和kafka集群topic信息。
110.消息生产者创建模块,用于基于所述kafka集群节点信息和所述kafka集群topic信息创建kafka消息生产者。
111.在一个实施例中,所述消息发送模块230可以包括:
112.第一发送模块,用于将所述二进制数组类型消息发送到所述kafka消息生产者。
113.第二发送模块,用于基于所述kafka消息生产者将所述二进制数组类型消息发送到kafka集群中。
114.在一个实施例中,本发明还提供了一种存储介质,所述存储介质中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述基于protobuf协议动态解析的kafka消息发送方法的步骤。
115.在一个实施例中,本发明还提供了一种计算机设备,所述计算机设备中存储有计算机可读指令,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述实施例中任一项所述基于protobuf协议动态解析的kafka消息发送方法的步骤。
116.示意性地,如图6所示,图6为本发明实施例提供的一种计算机设备的内部结构示意图,该计算机设备300可以被提供为一服务器。参照图6,计算机设备300包括处理组件302,其进一步包括一个或多个处理器,以及由存储器301所代表的存储器资源,用于存储可由处理组件302的执行的指令,例如应用程序。存储器301中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件302被配置为执行指令,以执行上述任意实施例的基于protobuf协议动态解析的kafka消息发送方法。
117.计算机设备300还可以包括一个电源组件303被配置为执行计算机设备300的电源管理,一个有线或无线网络接口304被配置为将计算机设备300连接到网络,和一个输入输出(i/o)接口305。计算机设备300可以操作基于存储在存储器301的操作系统,例如windows server tm、mac os xtm、unix tm、linux tm、free bsdtm或类似。
118.本领域技术人员可以理解,图6中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
119.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
120.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
121.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献