rpc框架: thrift/avro/protobuf 之maven插件生成java类

简介: thrift、avro、probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都要手动敲命令,未免太无聊了,幸好这三种框架都提供了对应的maven插件来完成代码的自动生成,本文演示了这三种框架的maven插件用法。

thriftavroprobobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都要手动敲命令,未免太无聊了,幸好这三种框架都提供了对应的maven插件来完成代码的自动生成,本文演示了这三种框架的maven插件用法。

一、maven-thrift-plugin

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6  
 7     <groupId>yjmyzz</groupId>
 8     <artifactId>thrift-contract</artifactId>
 9     <version>1.0</version>
10  
11     <properties>
12         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13         <compiler-plugin.version>2.3.2</compiler-plugin.version>
14         <thrift.version>0.9.2</thrift.version>
15     </properties>
16  
17     <dependencies>
18         <dependency>
19             <groupId>org.apache.thrift</groupId>
20             <artifactId>libthrift</artifactId>
21             <version>${thrift.version}</version>
22         </dependency>
23     </dependencies>
24  
25     <build>
26         <plugins>
27             <plugin>
28                 <groupId>org.apache.maven.plugins</groupId>
29                 <artifactId>maven-compiler-plugin</artifactId>
30                 <version>${compiler-plugin.version}</version>
31                 <configuration>
32                     <encoding>${project.build.sourceEncoding}</encoding>
33                 </configuration>
34             </plugin>
35             <plugin>
36                 <groupId>org.apache.thrift.tools</groupId>
37                 <artifactId>maven-thrift-plugin</artifactId>
38                 <version>0.1.11</version>
39                 <configuration>
40                     <thriftExecutable>/usr/local/bin/thrift</thriftExecutable>
41                 </configuration>
42                 <executions>
43                     <execution>
44                         <id>thrift-sources</id>
45                         <phase>generate-sources</phase>
46                         <goals>
47                             <goal>compile</goal>
48                         </goals>
49                     </execution>
50                     <execution>
51                         <id>thrift-test-sources</id>
52                         <phase>generate-test-sources</phase>
53                         <goals>
54                             <goal>testCompile</goal>
55                         </goals>
56                     </execution>
57                 </executions>
58             </plugin>
59         </plugins>
60     </build>
61  
62 </project>
View Code

.thrift文件约定放在src/main/thrift目录即可,运行mvn package后,会自动在target目录下生成java源码及编译后的class,参考下图:

 

二、avro-maven-plugin

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>yjmyzz.avro</groupId>
 8     <artifactId>avro-contract</artifactId>
 9     <version>1.0</version>
10 
11     <properties>
12         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13         <compiler-plugin.version>2.3.2</compiler-plugin.version>
14         <avro.version>1.7.5</avro.version>
15     </properties>
16     <dependencies>
17         <dependency>
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20             <version>4.10</version>
21             <scope>test</scope>
22         </dependency>
23         <dependency>
24             <groupId>org.slf4j</groupId>
25             <artifactId>slf4j-simple</artifactId>
26             <version>1.6.4</version>
27             <scope>compile</scope>
28         </dependency>
29         <dependency>
30             <groupId>org.apache.avro</groupId>
31             <artifactId>avro</artifactId>
32             <version>${avro.version}</version>
33         </dependency>
34         <dependency>
35             <groupId>org.apache.avro</groupId>
36             <artifactId>avro-ipc</artifactId>
37             <version>${avro.version}</version>
38         </dependency>
39     </dependencies>
40     <build>
41         <plugins>
42             <plugin>
43                 <groupId>org.apache.maven.plugins</groupId>
44                 <artifactId>maven-compiler-plugin</artifactId>
45                 <version>${compiler-plugin.version}</version>
46             </plugin>
47             <plugin>
48                 <groupId>org.apache.avro</groupId>
49                 <artifactId>avro-maven-plugin</artifactId>
50                 <version>${avro.version}</version>
51                 <executions>
52                     <execution>
53                         <id>schemas</id>
54                         <phase>generate-sources</phase>
55                         <goals>
56                             <goal>schema</goal>
57                             <goal>protocol</goal>
58                             <goal>idl-protocol</goal>
59                         </goals>
60                     </execution>
61                 </executions>
62             </plugin>
63         </plugins>
64     </build>
65 </project>
View Code

各种avro的定义文件放在src/main/avro下,其它跟thrift类似,参考下图:

 

三、protobuf-maven-plugin

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>yjmyzz.protobuf</groupId>
 8     <artifactId>protobuf-contract</artifactId>
 9     <version>1.0</version>
10 
11 
12     <dependencies>
13         <dependency>
14             <groupId>com.google.protobuf</groupId>
15             <artifactId>protobuf-java</artifactId>
16             <version>3.0.0-beta-1</version>
17         </dependency>
18     </dependencies>
19     <build>
20         <plugins>
21             <plugin>
22                 <groupId>com.github.igor-petruk.protobuf</groupId>
23                 <artifactId>protobuf-maven-plugin</artifactId>
24                 <version>0.6.3</version>
25                 <executions>
26                     <execution>
27                         <goals>
28                             <goal>run</goal>
29                         </goals>
30                     </execution>
31                 </executions>
32                 <configuration>
33                     <protocCommand>/usr/local/bin/protoc</protocCommand>
34                 </configuration>
35             </plugin>
36         </plugins>
37     </build>
38 
39 
40 </project>
View Code

定义文件放在/src/main/protobuf下,其它跟前二个插件类似,参考下图:

注:<protocCommand>/usr/local/bin/protoc</protocCommand> 这里的protoc编译器的版本,必须与

<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.0.0-beta-1</version>
</dependency>

中的版本号兼容,否则生成java时会提示版本号不一致

目录
相关文章
|
10天前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
60 6
|
3月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
20天前
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
23天前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
14天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
32 0
|
1月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
105 4
|
2月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
2月前
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
|
2月前
|
Java 数据库连接 Maven
【Java笔记+踩坑】Maven高级
分模块开发、依赖传递与冲突问题、 可选依赖和排除依赖、聚合和继承、属性、多环境配置与应用、私服安装和使用
【Java笔记+踩坑】Maven高级
|
3月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC

推荐镜像

更多