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时会提示版本号不一致

目录
相关文章
|
1天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
16 5
|
2天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
19天前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
34 1
|
22天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
23天前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
|
21天前
|
存储 算法 Java
Java中的集合框架深度解析与实践
【8月更文挑战第31天】在Java编程的海洋中,集合框架扮演着不可或缺的角色。本文将带你领略Java集合框架的魅力,从理论到实践,深入浅出地探索List、Set和Map等核心接口的使用技巧。我们将通过具体代码示例,展示如何在日常开发中高效运用这些工具,让你的代码更加优雅和高效。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往Java集合世界的大门。
|
29天前
|
并行计算 算法 Java
Java 中的 fork-join 框架详解
【8月更文挑战第23天】
44 0
|
Java Apache 开发者
Thrift入门初探--thrift安装及java入门实例
  公司的一些平台服务框架底层封装了thrift提供服务,最近项目不是很紧,于是研究了一下,刚刚入门,理解得不深,写这篇博文来整理一下思路. 什么是thrift?   简单来说,是Facebook公布的一款开源跨语言的RPC框架.
1538 0
|
XML JSON Java
[Thrift]Apache Thrift入门Java实例
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52606287 1. 概述 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。
1108 0
|
Java PHP Apache
Thrift入门及Java实例(一)
一、前言 公司一直用thrift作为服务化端的编写,实现java与php的对接,一直以来都用觉得还是可以,这里分享给大家希望大家喜欢这个工具。
1116 0

推荐镜像

更多