grpc java环境搭建+简单例子

本文详细介绍了在Ubuntu 16.04上搭建Java GRPC环境的过程,包括protobuf的使用、protoc-gen-grpc-java插件的下载与安装,以及GRPC服务器和客户端程序的编写。作者遇到网上教程不适用和Github资源无法访问的问题,通过实践最终成功实现了一个简单的HelloWorld示例。文章最后给出了GRPC服务器和客户端的Java代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前用GRPC主要是用Golang,Java之前基本只停留在会写hello world阶段。现在工作上需要用到Java的GRPC,所以不得不从头开始。让我沮丧的是,网上现有的教程基本都跑不通,然后Github上的grpc-java库按照readme一步一步走又提示一个网站不可达(不知道是不是被墙了)。靠着摸索一步一步地把一个Java的GRPC基本的HelloWorld弄通了。我主要参考的是这篇博客:

https://blog.youkuaiyun.com/qq_35047503/article/details/80985794

写GRPC程序其实总结起来就是:利用protobuf将定义的消息和服务生成对应语言的源代码,然后下载对应语言的grpc库,通过grpc库调用生成的服务,传递消息。

我的环境是ubuntu 16.04,之前我的电脑上是装了protoc命令的,GRPC程序需要使用protoc将.proto文件生成对应的源代码文件。没有装的话百度一下也会有很多教程。

定义proto文件helloworld.proto:

syntax = "proto3";
option java_multiple_files = true;
option java_package = "demo";
option java_outer_classname = "HelloWorldProto";
//option java_generic_services = true;
// 可以生成rpc接口

package helloworld;
service GreetHelloWorld {
rpc SayHello (HelloWorldRequest) returns (HelloWorldResponse);
}

message HelloWorldRequest {
string name = 1;
}


message HelloWorldResponse {
string message = 1;
}

用这个来生成java源文件。有一些教程上面说把这个文件放到一个maven工程中可以一键自动生成java文件,但是我试了没有成功。如果您看到这篇文章知道如何利用maven生成java源文件的话希望您能告诉我一下。

此时还不够,需要下载protoc的java插件,否则只会针对message生成java文件,我们定义的service GreetHelloWorld没有办法生成java文件。需要下载protoc-gen-grpc-java插件,下载地址:https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/

文件名里就是具体用于哪个平台的grpc-java插件,虽然都是.exe结尾,但是不都是windows平台下面的东西。将grpc-java插件可执行文件下载下来即可。

编译proto文件:

protoc --java_out=./ ./helloworld.proto

这条命令会将定义的message编译成.java文件

protoc --plugin=protoc-gen-grpc-java=grpc-java插件可执行文件路径 --grpc-java_out=./ ./helloworld.proto

这条命令将定义的servic

<think>好的,我现在需要帮助用户了解如何在Java中配置gRPC。首先,我需要回忆一下用户提供的引用内容,看看里面有哪些相关的步骤和资源。 用户引用了四个文档,其中提到了安装gRPCJava环境、使用Gradle和Maven的步骤,以及生成proto接口的方法。首先,我应该按照这些引用来组织回答,确保步骤正确。 第一步,安装和项目设置。用户提到需要克隆grpc-java仓库,并用Gradle构建示例项目。引用[2]中的命令是`git clone`和`./gradlew installDist`,这部分需要放在安装步骤里。同时,引用[3]提到创建Maven项目,所以可能需要分Gradle和Maven两种情况说明依赖配置。 第二步,配置依赖管理。用户引用了Maven和Gradle的例子,比如在pom.xml中添加grpc-all依赖,以及Gradle的protobuf插件配置。引用[3]和[4]中提到了Maven命令生成代码,这里需要详细说明如何配置构建文件。 第三步,定义proto文件。这部分需要指导用户编写.proto文件,并确保语法正确。引用[3]中的grpc-protos项目可能涉及如何组织proto文件结构,需要强调这部分的重要性。 第四步,生成代码。引用[4]中的Maven命令`mvn protobuf:compile`是用来生成Java类的,这里要说明如何通过构建工具自动生成服务端和客户端的代码。 第五步,服务实现和启动。根据引用[3],可能需要创建服务实现类并重写方法,然后启动gRPC服务器。这部分需要给出示例代码,比如使用`ServerBuilder`来配置端口和服务。 第六步,客户端配置。需要展示如何创建通道和管理存根,引用[3]和[4]中的生成对象可能涉及`ManagedChannel`和阻塞存根的使用。 另外,用户的问题是关于配置指南,所以需要涵盖环境搭建、依赖管理、构建配置、代码生成、服务端和客户端的设置。需要检查是否有遗漏的步骤,比如是否需要处理SSL配置或者负载均衡,但根据引用内容,可能暂时不需要深入这些高级主题,保持基础配置即可。 还要注意用户提供的示例中代码块的使用,需要用正确的格式展示Java代码和构建脚本。同时,确保所有LaTeX格式正确,但根据问题内容,可能数学公式较少,重点在代码和配置步骤。 最后,生成相关问题时要围绕gRPCJava配置,可能涉及性能优化、不同构建工具对比、常见错误处理等。需要确保问题与配置指南相关,帮助用户进一步学习。</think>以下是Java中配置gRPC的逐步指南,整合了官方文档和实践经验: ### 一、安装与环境配置 1. **依赖管理工具** - 使用Maven时,在`pom.xml`中添加: ```xml <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-all</artifactId> <version>1.54.0</version> </dependency> ``` - 使用Gradle时配置protobuf插件: ```groovy plugins { id 'com.google.protobuf' version '0.9.2' }[^2] ``` 2. **Proto文件定义** ```protobuf syntax = "proto3"; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 2; } ``` ### 二、代码生成配置 1. **Maven项目执行命令**: ```bash mvn protobuf:compile protobuf:compile-custom # 生成请求/响应对象及存根类[^4] ``` 2. **Gradle项目构建**: ```bash ./gradlew installDist # 自动生成服务存根 ``` ### 三、服务端实现 ```java public class GreeterImpl extends GreeterGrpc.GreeterImplBase { @Override public void sayHello(HelloRequest req, StreamObserver<HelloReply> resObserver) { HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build(); resObserver.onNext(reply); resObserver.onCompleted(); } } Server server = ServerBuilder.forPort(8080) .addService(new GreeterImpl()) .build().start();[^3] ``` ### 四、客户端配置 ```java ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080) .usePlaintext() // TLS配置可替换为.useTransportSecurity() .build(); GreeterGrpc.GreeterBlockingStub stub = GreeterGrpc.newBlockingStub(channel); HelloReply response = stub.sayHello(HelloRequest.newBuilder().setName("World").build());[^3] ``` ### 高级配置建议 - TLS加密配置需替换`.usePlaintext()`为: ```java .useTransportSecurity() .sslContext(GrpcSslContexts.forClient().trustManager(new File("server.crt")).build()) ``` - 负载均衡策略可通过`NameResolverRegistry`配置[^1]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值