Java 实现grpc
要在Java中实现gRPC,你需要遵循以下步骤:
- 定义gRPC服务:在
.proto
文件中定义服务和消息格式。 - 使用Protocol Buffers编译器生成Java代码:运行
protoc
来从.proto
文件生成Java代码。 - 实现服务端:创建一个gRPC服务器,并注册你的服务实现。
- 实现客户端:创建一个gRPC通道,并使用它来创建你的stub。
以下是一个简单的例子:
1. 定义 helloworld.proto
:
syntax = "proto3";
package example;
// 定义服务
service Greeter {
// 定义rpc方法
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// 消息定义
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
2. 生成Java代码:
protoc --java_out=./src/main/java -I./src/main/proto ./src/main/proto/helloworld.proto
3. 实现服务端 GreeterService.java
:
import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;
public class GreeterService extends GreeterGrpc.GreeterImplBase {
@Override
public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();
responseObserver.onNext(reply);
responseObserver.onCompleted();
}
public void startServer() throws IOException {
int port = 50051;
Server server = ServerBuilder.forPort(port)
.addService(new GreeterService())
.build()
.start();
System.out.println("Server started, listening on " + port);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.err.println("Shutting down gRPC server since JVM is shutting down");
try {
server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace(System.err);
Thread.currentThread().interrupt();
}
}));
}
public static void main(String[] args) throws IOException {
new GreeterService().startServer();
}
}
4. 实现客户端 GreeterClient.java
:
public class GreeterClient {
private final ManagedChannel channel;
private final GreeterGrpc.GreeterBlockingStub blockingStub;
public GreeterClient(String host, int port) {
评论已关闭