与服务器端类似,可以使用服务定义生成客户端存根。客户端存根提供了与服务器端类似的方法,供客户端代码进行调用。客户端存根会将这些方法转换成对服务器端的远程函数网络调用。由于 gRPC 服务定义是语言中立的,能够为所支持的任意语言(通过第三方实现)生成客户端和服务器端,因此对于 ProductInfo 服务用例来说,虽然我们的服务器端使用 Go 语言来实现,但是仍可以生成使用 Java 语言的客户端存根。代码清单 1-4 展示了用 Java 语言编写的代码,尽管所使用的编程语言不同,但可以看到,客户端实现仅涉及几个简单的步骤,包括建立与远程服务器的连接、将客户端存根与连接关联到一起,以及使用客户端存根调用远程方法。
// 使用远程服务器地址创建通道
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080)
.usePlaintext(true)
.build();
// 使用通道初始化阻塞式存根
ProductInfoGrpc.ProductInfoBlockingStub stub =
ProductInfoGrpc.newBlockingStub(channel);
// 使用阻塞式存根调用远程方法
StringValue productID = stub.addProduct(
Product.newBuilder()
.setName("Apple iPhone 11")
.setDescription("Meet Apple iPhone 11." +
"All-new dual-camera system with " +
"Ultra Wide and Night mode.")
.build());
现在我们已经理解了 gRPC 的关键概念,接下来详细了解 gRPC 客户端–服务器端的消息流。
文档更新时间: 2023-09-02 03:23 作者:Minho