gRPC Java Quickstart

本指南通过简单的工作示例可以让您以Java开始使用gRPC。

开始之前

先决条件

  • JDK:版本7或更高版本

下载样例

您将需要一个示例代码的本地副本来完成此快速入门。从我们的Github存储库中下载示例代码(以下命令克隆整个存储库,但您只需要这个快速入门和其他教程的示例)。

$ # Clone the repository at the latest release to get the example code:
$ git clone -b v1.2.0 https://github.com/grpc/grpc-java
$ # Navigate to the Java examples:
$ cd grpc-java/examples

运行gRPC应用

examples目录中:

  1. 编译客户端和服务器
$ ./gradlew installDist
  1. 运行服务器
$ ./build/install/examples/bin/hello-world-server
  1. 在另一个终端,运行客户端
$ ./build/install/examples/bin/hello-world-client

恭喜你!您刚刚使用gRPC运行客户端 - 服务器应用程序。

更新gRPC服务

现在我们来看看如何使用服务器上的一个额外的方法来更新应用程序,以供客户端调用。我们的gRPC服务是使用协议缓冲区定义的;
您可以在gRPC Basics: Java中找到关于如何在.proto文件中定义服务的更多信息。
现在所有你需要知道的是,服务器和客户端“stub”都有一个SayHelloRPC方法,它从客户端获取一个HelloRequest参数,并从服务器返回一个HelloResponse,这个方法是这样定义的:

// 欢迎服务的定义
service Greeter {
  // 发送一个问候
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// 请求消息中包含用户名信息
message HelloRequest {
  string name = 1;
}

// 响应消息中包含问候语信息
message HelloReply {
  string message = 1;
}

让我们更新这个,以便Greeter服务有两种方法。编辑src/main/proto/helloworld.proto并使用一个新的SayHelloAgain方法更新它,该方法具有相同的请求和响应类型:

// 欢迎服务的定义
service Greeter {
  // 发送一个问候
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // 发送另一个问候
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

// 请求消息中包含用户名信息
message HelloRequest {
  string name = 1;
}

// 响应消息中包含问候语信息
message HelloReply {
  string message = 1;
}

(不要忘记保存文件!)

更新并运行应用

当我们重新编译示例时,将重新生成GreeterGrpc.java。其中包含我们生成的gRPC客户端和服务器类。这也会重新生成用于填充,序列化和检索我们的请求和响应类型的类。

然而,我们仍然需要在我们的示例应用程序的人为书写部分中实现和调用新的方法。

更新服务器

在同一个目录中,打开src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java。像这样实现新方法:

private class GreeterImpl 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();
  }

  @Override
  public void sayHelloAgain(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
    HelloReply reply = HelloReply.newBuilder().setMessage("Hello again " + req.getName()).build();
    responseObserver.onNext(reply);
    responseObserver.onCompleted();
  }
}
...

更新客户端

在同一个目录中,打开src/main/java/io/grpc/examples/helloworld/HelloWorldClient.java。像这样调用新方法:

public void greet(String name) {
  logger.info("Will try to greet " + name + " ...");
  HelloRequest request = HelloRequest.newBuilder().setName(name).build();
  HelloReply response;
  try {
    response = blockingStub.sayHello(request);
  } catch (StatusRuntimeException e) {
    logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());
    return;
  }
  logger.info("Greeting: " + response.getMessage());
  try {
    response = blockingStub.sayHelloAgain(request);
  } catch (StatusRuntimeException e) {
    logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());
    return;
  }
  logger.info("Greeting: " + response.getMessage());
}

运行

就像我们以前一样,从examples目录中:

  1. 编译客户端和服务器
$ ./gradlew installDist
  1. 运行服务器
$ ./build/install/examples/bin/hello-world-server
  1. 在另一个终端,运行客户端
$ ./build/install/examples/bin/hello-world-client

下一步

参考链接: gRPC Java Quickstart

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值