syntax = "proto3";
option java_multiple_files = true;
option java_package = "examples";
option java_outer_classname = "HelloWorldProto";
package helloworld;
// 问候服务定义
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
你当前正在浏览历史版本 Vert.x 4.0.3 的文档。 访问本页面的 最新版本。
Vert.x gRPC 模块
关于 gRPC 最权威的定义可以参考 Wikipedia:
gRPC 是由 Google 最初发起的开源高性能远程过程调用 (RPC) 框架。它基于 HTTP/2 协议进行高效传输,采用 Protocol Buffers (Protobuf) 作为服务接口描述语言,提供全套身份认证、双向流式通信、流量控制、背压绑定以及请求取消与超时处理机制。它能为众多编程语言自动生成跨平台的客户端与服务端强类型绑定。
— wikipedia
wikipedia
wikipedia
Vert.x gRPC 模块将 Google gRPC 的编程风格深度融入 Vert.x 响应式体系。使用该模块,你可以在充分享受 gRPC 跨语言生态优势的同时,借助 Vert.x 流(Streams)与 Future 开展全异步非阻塞开发。
更多背景请访问官方主页 http://www.grpc.io/。
gRPC 核心通信模式
借助 HTTP/2 的多路复用与全双工特性,gRPC 支持以下四种流式交互范式:
-
单向请求,单向响应 (Unary RPC)
-
单向请求,服务端流式响应 (Server Streaming RPC)
-
客户端流式请求,服务端单向响应 (Client Streaming RPC)
-
双向全双工流式通信 (Bidirectional Streaming RPC)
快速开始:Hello World 示例
首先在 src/main/proto/helloworld.proto 中声明服务契约:
gRPC 服务端实现
GreeterGrpc.GreeterImplBase service = new GreeterGrpc.GreeterImplBase() {
@Override
public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
responseObserver.onNext(HelloReply.newBuilder().setMessage("你好," + request.getName()).build());
responseObserver.onCompleted();
}
};
VertxServer rpcServer = VertxServerBuilder
.forAddress(vertx, "localhost", 8080)
.addService(service)
.build();
rpcServer.start();
gRPC 客户端实现
ManagedChannel channel = VertxChannelBuilder
.forAddress(vertx, "localhost", 8080)
.usePlaintext()
.build();
GreeterGrpc.GreeterStub stub = GreeterGrpc.newStub(channel);
HelloRequest request = HelloRequest.newBuilder().setName("Vert.x 开发者").build();
stub.sayHello(request, new StreamObserver<HelloReply>() {
@Override
public void onNext(HelloReply reply) {
System.out.println("收到服务端问候: " + reply.getMessage());
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onCompleted() {}
});