1.å¦ä½å¨eclipseä¸ä½¿ç¨protocolbuf
2.在C++中使用Protobuf
3.微服务框架 go-zero 快速实战
4.Qt6.3 for Android - Protobuf交叉编译
5.windows之google protobuf安装与使用
6.protobuf基本使用
å¦ä½å¨eclipseä¸ä½¿ç¨protocolbuf
ããProtocbuf å°±æ¯Protocol buffersï¼mxlä¸æ ·å¨åºååæ°æ®ç»ææ¶å¾çµæ´»ãé«æåæºè½ï¼ä½æ¯å®çä¼å¿å¨äºå®ä¹æ件æ´å°ï¼è¯»åé度æ´å¿«ï¼ä½¿ç¨æ´å ç®åã
ãã使ç¨æ¥éª¤ï¼
ãã1 ä¸è½½ç¼è¯å¨åprotocolbuffçjarå ã
ãã2 æä¸è½½å¥½çjarå¯¼å ¥å°eclipseã
ãã3 解åç¼è¯å¨å缩å ï¼å¾å°ä¸ä¸ªprotoc.exeã
ãã4å¨eclipseä¸æ°å»ºä¸ä¸ªå·¥ç¨ï¼ååæ¯å¦å«åprotocolbufferï¼å¨è¯¥å·¥ç¨ç®å½ä¸ï¼æ°å»ºä¸ä¸ªprobuf(ååéæå)æ件夹ï¼ç¨æ¥è£ ï¼.protoï¼æ件çãåæ¶æåæ解åå¾å°çprotoc.exe移å¨å°è¯¥å·¥ç¨ç®å½ä¸é¢ï¼å¹¶å¨pathè·¯å¾ï¼é 置该.exeçç¯å¢åéã
ãã5 Googleå®ç½ï¼æ个AddressBookProtosçä¾åï¼ä¹å°±æ¯åªä¸ª.protoæ件ï¼å»åå°ä¸å¨å¤å¶ä¸æ¥ï¼ç¶åï¼æ¾å°åææ°å»ºçå·¥ç¨ä¸probufçæ件夹ä¸ï¼æ³¨ææ件æ©å±åå¿ é¡»æ¯.protoã
ãã6 ç¨protoc.exeç¼è¯è¿ä¸ªaddressbook.protoæ件ï¼æå¼å½ä»¤è¡ï¼è¿å ¥æ建工ç¨ç®å½ï¼æ§è¡å¦ä¸å½ä»¤ protoc âI=probuf/ --java_out=src probuf/addressbook.proto,源码(å¦æ建çæ件ååè¿ä¸ªä¸æ ·ï¼ç´æ¥åå°ä¸å¨ï¼å¤å¶ç²è´´ï¼æ§è¡å³å¯)ï¼æ§è¡å®æ¯å³å¯å¾å°javaæ件ï¼è·¯å¾æ¯src\com\example\tutorial\AddressBookProtos.javaã
ãã7å¨eclipseä¸çæ°å»ºå·¥ç¨srcä¸æ¯å¦åå¨\com\example\tutorial\ AddressBookProtos.javaï¼eclipseä¸æ²¡æå¯¼å ¥æåï¼éè¦æä»å¯¼å ¥eclipseä¸ï¼ææ¯ç´æ¥æsrcä¸æ¤å ç´æ¥åªåï¼ç¶åæ¾å°æ¡é¢ï¼ç¶åç´æ¥å¨eclipseä¸srcä¸ç²è´´å°±å¯ä»¥äºã
ãã8ç¼åæµè¯javaæ件ãGoogleåæ ·æç»åºä¾åï¼å ¶javaæºç å¨åææ¾addressbook.protoæ件夹ä¸ï¼æ个LisPeople.javaåä¸ä¸ªAddPerson.java,ç´æ¥å¤å¶ç²è´´è¿å ¥ä½ çeclipseä¸å³å¯ä½¿ç¨ã
ãã9ç°å¨javaæºç é½è¿å ¥äºeclipseä¸ï¼å¹¶ä¸æ ä»»ä½é误ãé¦å æ§è¡æ·»å 人ç©ä¿¡æ¯ï¼è¿è¡æ¶å´åºéäºï¼æ¾ç¤ºï¼Usage: AddPersonADDRESS_BOOK_FILEï¼è¿æ¯å 为ï¼ä½ ç¨çeclipseæ§è¡çï¼è并éç¨å½ä»¤æ¥æ§è¡çï¼mainæ¹æ³ä¸çï¼String[] args为空ï¼åºè¯¥æ³¨éæmainæ¹æ³ä¸ç´§è·ççifæ£æ¥ï¼å¹¶å°ææçargs[0]ç¨ä¸ä¸ªstring代æ¿ï¼æ¯å¦âperson.txtâ,å次æ§è¡ï¼å°±è½æ·»å äºã
ããæ©å±ï¼
ããProtocolBuf ç缺é·ï¼é£å°±æ¯è¿ä¸å¤æçï¼ä¸æ°æ®æ读æ§å¾å·®ã
在C++中使用Protobuf
ProtoBuf的定义和描述:
Protocol Buffers是一种语言无关、平台无关、分析可扩展的源码序列化结构数据的方法,它适用于(数据)通信协议、分析数据存储等。源码
Protocol Buffers是分析园艺网站源码一种灵活、高效、源码自动化的分析结构数据序列化方法,类似于XML,源码但比XML更小(3 ~ 倍)、分析更快( ~ 倍)、源码更简单。分析
你可以定义数据的源码结构,然后使用特殊生成的分析源代码轻松地在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,源码而不会破坏由旧数据结构编译的已部署程序。
使用 ProtoBuf教程:
在了解了ProtoBuf的基本概念之后,我们将具体了解如何使用ProtoBuf。
第一步,创建.proto文件,定义数据结构,如下所示:
我们在上例中定义了一个名为Person的消息,语法很简单,message关键字后跟消息名称。之后我们在其中定义了message具有的字段,形式为:
第二步,protoc编译.proto文件生成读写接口:
在.proto文件中定义了数据结构,这些数据结构是面向开发者和业务程序的,并不面向存储和传输。当需要把这些数据进行存储或传输时,就需要将这些结构数据进行序列化、反序列化以及读写。ProtoBuf提供相应的接口代码,可以通过protoc这个编译器来生成相应的接口代码,命令如下:
生成的.h,.cpp文件为person.pb.h,person.pb.cpp,且.h的定义与proto文件的内容相关联:
第三步,编写C++业务代码:
c++业务代码对应的CMakeLists.txt为:
参考链接:
微服务框架 go-zero 快速实战
快速了解并使用微服务框架 go-zero,主要需要具备基础能力,无需深入,理解知识点便于学习。
go-zero 是msdos汇编源码编译一个结合各种工程实践的 web 和 rpc 框架,通过弹性设计确保服务端在高并发下的稳定性。它能一键生成 api、rpc、数据库等代码,简化开发流程,提高效率和质量。使用 go-zero,可轻松实现微服务功能,极大提升开发效率。
go-zero 提供了详细的架构图,展示功能实现离不开各个模块的协作。本文将逐步介绍 go-zero 的基本介绍、环境搭建和快速实战。
搭建环境是使用 go-zero 的前提。首先,需要安装 etcd 和 mysql。通过 etcdctl 和 mysql 的基本命令进行验证,无需深入学习。接着,安装 protoc 和 goctl 工具,确保版本正确,用于生成代码。
环境搭建完毕后,即可进行 go-zero 的快速实战。go-zero 集成了 web 和 rpc 框架,支持接口设计。通过定义 rpc 接口和 api 接口,实现服务间的交互。借助 goctl 工具,自动生成代码,简化开发步骤。
在实战过程中,需考虑数据库设计,使用 sql 文件进行配置。填充逻辑层和配置,验证功能效果。通过 etcd 和 curl 工具验证接口调用,分析日志信息,确保系统功能完整性和一致性。
总结,go-zero 提供了一个高效、稳定的网站源码的获取微服务框架,通过自动化代码生成和模块化设计,简化了开发流程,提高了开发效率和质量。本文介绍了快速实战 go-zero 的基本步骤和关键点,希望对开发者有所帮助。
欢迎对 go-zero 框架感兴趣的朋友继续探索和实践,深入了解源码,提升技术能力。感谢阅读,期待交流和反馈。继续关注分享,共同成长。技术开放,心态开放,拥抱变化,努力前行。
Qt6.3 for Android - Protobuf交叉编译
前言
在开发跨平台应用时,利用Protobuf作为数据传输载体是常见的做法。当项目迁移到Android平台,希望复用C++代码,这时需借助Android NDK的交叉编译工具链进行编译。
交叉编译工具链
为了进行Android平台的交叉编译,首先确保安装了Android SDK、NDK及JDK工具包,这部分内容在前文已有详述,本文不再赘述。
关键点:
1. 选择Clang编译器,确保与Qt for Android程序的编译器相匹配,避免运行时出现问题。
2. 注意Android NDK的不同版本,其交叉编译工具链使用方式有所差异,本文以使用Android NDK 版本为例。
下载Protobuf源码
使用Protobuf 3.0.0版本,通过GitHub链接下载源码。
编写交叉编译脚本
以下示例基于Android NDK 版本,脚本关键部分已注释。更多详细信息可查阅相关文档。
运行脚本后,在指定目录生成适用于不同平台的.so文件、include文件以及protoc工具。
注意事项:
1. 检查编译过程中的日志输出,确保使用了配置的stf指标源码目录工具链。
2. 执行生成的protoc工具,验证其正确性。注意,生成的protoc为aarch版本,在x Linux环境上无法直接执行。
3. 清理缓存,避免因缓存问题导致配置交叉工具链失败时,切换至本地gcc编译。
对于使用Android NDK r及更早版本的用户,需先生成独立的交叉编译工具链包,再进行配置。使用命令make-standalone-toolchain.sh完成此步骤。
最后,参考相关文档进行详细设置与调试。
windows之google protobuf安装与使用
本文将通过创建一个简单的“地址簿”示例应用程序来展示如何使用 Google Protocol Buffer(简称 Protobuf)。将从以下几点来介绍prototbuf:1.安装 2.定义protobuf消息格式 3.编译protobuf 4.protobuf API 5.读写protobuf消息
1.安装
在Windows下安装protobuf很简单,只需下载protoc-3.4.0-win.zip压缩包然后解压,会看到该bin文件夹下有一个名为protoc.exe的应用程序。这个就是本文要使用的编译器。
2.定义protobuf消息格式
创建一个非常简单的“地址簿”应用程序,可以在文件中读取和写入人员的联系人详细信息。地址簿中的每个人都有姓名,ID,电子邮件地址和联系电话号码。要创建地址簿应用程序,需要从.proto文件开始。.proto文件中的定义很简单:为要序列化的每个数据结构添加消息,然后为消息中的每个字段指定名称和类型。
下面是.proto定义的消息文件addressbook.proto,包含消息的定义以及字段的类型和描述。
syntax = "proto2"; package tutorial; message Person { required string name = 1; required int id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phones = 4; } message AddressBook { repeated Person people = 1; }
每个元素上的“= 1”,“= 2”标记是标识该字段在二进制编码中的唯一“标记”。标记号1-相对于比较大的数字只需要一个字节进行编码,因此作为优化,可以决定将这些标记号用于常用或重复的元素,将标记号和更高的标记号留给不太常用的可选元素。重复字段中的每个元素都需要重新编码标记号,因此重复字段特别适合此优化。
3.编译protobuf
运行protobuf编译器protoc.exe对.proto进行编译,编译命令格式如下:protoc -I = $ SRC_DIR --python_out = $ DST_DIR $ SRC_DIR / addressbook.proto。其中,$ SRC_DIR是php源码接入支付源目录(应用程序的源代码所在的位置),$ DST_DIR 是目标目录(希望生成的代码在哪里)。
4.protobuf API
为您的所有消息,枚举和字段以及一些神秘的空类生成特殊描述符,每个消息类型对应一个Python类。可以使用Python类,就好像它将Message基类的每个字段定义为常规字段一样。例如,可以写代码,创建并填充protobuf类的实例,然后将它们写入输出流。
5.读写protobuf消息
使用protobuf类,可以尝试将个人详细信息写入地址簿文件。需要创建并填充protobuf类的实例,然后将它们写入输出流。这是一个程序(文件名为write.py),它从数据文件中读取AddressBook类,根据用户输入添加一个新Person到AddressBook中,然后再将新AddressBook写回文件。
最后会在data.pb文件中产生结果,然后在命令窗口下执行以下命令,会出现输出。到此,关于protobuf的简单使用已经介绍完了,如果想了解更多有关protobuf的使用,请浏览google protocol buffer官网。
protobuf基本使用
Protocol Buffers,简称为 Protobuf,是一种由 Google 提出的高效、灵活的数据序列化方法。它旨在提供数据存储和通信协议的解决方案,比 XML 更小巧、更快速,同时拥有更简单的使用方式。Protocol Buffers 的核心优势在于不需要手动解析结构,提供了一种定义数据结构并自动生成代码进行数据读写的能力。
Protocol Buffers 的使用流程主要包括以下几个步骤:
1. **定义数据结构**:首先,需要创建一个.proto 文件,定义需要序列化的数据结构。这包括字段类型、命名和约束条件。
2. **编译生成代码**:使用 protoc 编译器将 .proto 文件编译为各编程语言对应的源代码文件。编译结果通常包含用于序列化和反序列化数据的函数。
3. **写文件**:使用生成的代码将数据序列化到文件中,通常会提供一个简单的脚本或命令行工具来执行序列化操作。
4. **读文件**:通过反序列化函数将数据从文件中读取到程序中,这一步可以通过另一段生成的代码来完成。
Protocol Buffers 的一个显著优势是,它允许你轻松地更新数据结构而不会破坏已部署的程序。这意味着,即使在数据结构发生变化时,已存在的客户端和服务端代码依然可以继续运行,只需重新编译受影响的代码部分即可。
在实际使用中,Protocol Buffers通常与各种编程语言的第三方库集成,例如 Python、Java、C++ 等,以简化数据交换和存储的实现。它在服务端和客户端通信、数据持久化和配置文件存储等领域有着广泛的应用。
总之,Protocol Buffers 通过提供自动化且高效的数据序列化能力,简化了数据在不同系统和语言之间的交换,使得开发者能够更专注于应用逻辑的实现而非低效的数据处理过程。
Hadoop3.3.5集成Hive4+Tez-0..2+iceberg踩坑过程
在集成Hadoop 3.3.5、Hive 4、Tez 0..2以及Iceberg 1.3的过程中,我们面对了诸多挑战,并在多方寻找资料与测试后成功完成集成。以下为集成步骤的详细说明。
首先,确保Hadoop版本为3.3.5,这是Hive运行的前置需求。紧接着,安装Tez作为计算引擎。由于Tez 0..2的依赖版本为3.3.1,与当前的Hadoop版本不符,因此,我们需手动编译Tez以避免执行SELECT操作时出现的错误。编译前,下载官方发布的Tez源码(release-0..2),并解压以获取编译所需文件。编译过程中,注意更新pom.xml文件中的Hadoop版本号至3.3.5,同时配置protoc.path为解压后的protoc.exe路径,并添加Maven仓库源。确保只编译tez-0..2-minimal.tar.gz,避免不必要的编译耗时。完成后,将编译好的文件上传至HDFS,并在主节点hadoop配置目录下新增tez-site.xml,同步配置至所有节点后重启集群。
Hive作为基于Hadoop的数据仓库工具,提供SQL查询和数据分析能力,新版本Hive 4集成了Iceberg 1.3,无需额外配置。本次集成步骤包括下载、解压、配置环境变量及初始化元数据。下载最新的Hive 4.0.0-beta-1版本,解压并配置环境变量,删除指定jar文件以避免提示错误。修改配置文件以设置Hive环境变量,并确保连接信息正确。初始化Hive元数据后,可以使用hive执行文件启动Hive服务。编写hive_management.sh脚本以实现Hive服务的管理。
通过beeline命令进行连接,执行创建数据库和表的SQL语句,使用Hive进行数据插入和查询。值得注意的是,Hive 4.0.0-beta-1已集成Iceberg 1.3,因此无需额外加载jar包,只需将计算引擎设置为Tez。若需更新Iceberg版本,需下载Hive源码,修改依赖并编译特定包。
为了创建Iceberg分区表,使用熟悉的Hive命令语法,例如创建分区表时使用STORED BY ICEBERG。分区规范的语法也与Spark相似,可在HMS中获取Iceberg分区详细信息,并执行相应的数据转换操作。参考文档提供了从安装至配置的详细指导,确保了集成过程的顺利进行。
protobuf 详解
Protobuf,即Protocol Buffers,是Google公司设计的一种轻量级、高效的结构化数据存储格式,用于结构化数据的序列化。它被广泛应用于数据存储和远程过程调用(RPC)的数据交换,支持语言无关、平台无关、可扩展的序列化结构数据格式。目前主要提供了C++、Java和Python三种语言的API。
Protobuf的优势在于其简洁性和高效性,允许开发者定义数据结构,并以二进制格式进行序列化和反序列化,从而节省了数据传输和存储的空间,同时也加快了数据处理的速度。然而,它也有一些劣势,比如学习曲线陡峭,对于初学者来说可能需要一定时间来熟悉其语法和使用方法。
在安装Protobuf时,protoc(Protocol Compiler)是核心组件,它能将.proto文件编译成不同语言的源代码。为了在Windows环境下安装protoc,首先需从GitHub下载protobuf源码,解压后添加bin目录路径到系统环境变量,然后通过命令行运行protoc查看是否成功安装。
对于Go语言的支持,由于protobuf本身并未直接提供Go语言的API,需要额外安装protoc-gen-go插件来生成Go语言的序列化和反序列化代码。在安装完protobuf后,使用Go1.+版本的命令行安装protoc-gen-go插件。如果需要生成gRPC相关的Go代码,则需要安装protoc-gen-go-grpc插件。
Protobuf的语法涵盖了多种数据类型,包括标量类型、可选类型、重复类型、映射类型以及嵌套的message类型。message成员可以被指定为标量类型,如字符串、整数等,也可以嵌套其他message类型。消息字段可以被标记为可选或重复类型,以适应不同的数据需求。
在.proto文件中定义消息类型时,可以使用默认值来简化序列化过程。默认值在解析数据时如果消息中未包含特定的字段,则将该字段设置为默认值。此外,Protobuf还支持enum(枚举类型)和oneof(互斥字段组)特性,用于定义具有预定义值列表的字段和最多只能设置其中一个字段的字段组。
为了将message与RPC(远程过程调用)结合使用,可以在.proto文件中定义RPC服务接口。通过protobuf编译器protoc,可以生成特定语言的RPC服务代码,包括生成序列化和反序列化的代码以及RPC服务的客户端和服务器代码。
使用protoc编译器将.proto文件编译成目标语言的源代码。编译命令通常会指定输出目录和目标语言,如Go语言。通过设置--go_out参数,可以指定生成的Go代码的基本路径。同时,--go_opt参数可以用来为生成的Go代码指定额外的优化选项。--proto_path参数用于设置Protobuf查找.proto文件的路径。
生成gRPC相关的Go代码需要使用protoc-gen-go-grpc插件,并通过--go-grpc_out参数指定输出目录。这将产生用于gRPC服务的客户端和服务器代码。
要使用protobuf,通常会从源代码下载protobuf,然后通过命令行工具protoc进行编译,从而生成特定语言的序列化和反序列化代码,以及RPC服务代码。对于Go语言,除了需要安装protobuf和protoc-gen-go插件外,还需根据需求安装protoc-gen-go-grpc插件来生成gRPC相关的代码。
ProtoBuf安装及避坑指南
在安装ProtoBuf前,确保g++为较新版本,若安装过程中遇到问题,尝试安装其他版本,使用`make uninstall`卸载源码安装的版本。在使用VSCode开发时,可能出现头文件检测不到的问题,这时需要查看编译器是否报错,而非仅依赖插件提示。以下为Linux环境下ProtoBuf的安装步骤。
安装依赖库:`autoconf`、`automake`、`libtool`、`curl`、`make`和`g++`,对于Ubuntu用户,使用`sudo apt-get install`命令安装,对于CentOS用户,使用`sudo yum install`命令安装。访问GitHub下载ProtoBuf的指定版本,如v.,选择`protobuf-all-..zip`进行下载。在Windows环境下下载后,通过xshell的`rz`指令将文件传输至Linux系统。解压zip包后,进入目录。
执行以下命令进行安装:`./configure`,根据需要选择安装方式。若在`configure`中选择第一种方式,直接执行`make`和`make install`即可完成安装。若选择第二种方式,修改了安装目录,还需在`/etc/profile`中添加相关配置信息,最后执行`source /etc/profile`使配置生效。安装完成后,通过`protoc --version`检查版本信息,显示版本号表示安装成功。
进行ProtoBuf测试示例:创建两个文件`test.cc`和`contacts.proto`。`test.cc`文件包含使用ProtoBuf的示例代码,而`contacts.proto`文件定义了相应的数据结构和字段。执行相关语句进行测试,验证ProtoBuf的安装和使用是否正常。