gRPC Java: 什么是简介和示例? gRPC?
gRPC 远程调用是一种高性能、开源的过程(RPC)框架,由 Google 开发。使用它 Protocol Buffers(简称 Protobuf)语言作为界面定义(IDL),支持多种编程语言。gRPC 它提供了双向流、流式新闻传输和认证等强大功能。
gRPC JavagRPC 它为各种编程语言提供了支持,包括 Java。gRPC Java 是 gRPC 的 Java 实现,它为 Java 开发人员提供使用 gRPC 的能力。
如何使用 gRPC Java?下面,我们将通过一个简单的例子来演示如何使用它 gRPC Java 远程过程调用。
步骤 1: 定义接口首先,我们需要定义界面并使用它 Protocol Buffers 界面定义。在这个例子中,我们将创建一个包含加法和乘法两种方法的简单计算器服务。
syntax = "proto3";option java_multiple_files = true;option java_package = "com.example.grpc.calculator";option java_outer_classname = "CalculatorProto";service CalculatorService { rpc Add(AddRequest) returns (AddResponse) {} rpc Multiply(MultiplyRequest) returns (MultiplyResponse) {}}message AddRequest { int32 operand1 = 1; int32 operand2 = 2;}message AddResponse { int32 result = 1;}message MultiplyRequest { int32 operand1 = 1; int32 operand2 = 2;}message MultiplyResponse { int32 result = 1;}
步骤 2: 生成代码接下来,我们需要使用它 Protocol Buffers 编译器生成相应的界面定义文件 Java 代码。
protoc --java_out=./src/main/java ./calculator.proto
步骤 3: 实现服务现在,我们可以实现我们定义的界面。首先,我们需要创建一个类来实现界面定义中的方法。
package com.example.grpc.calculator;import io.grpc.stub.StreamObserver;public class CalculatorService extends CalculatorServiceGrpc.CalculatorServiceImplBase { @Override public void add(AddRequest request, StreamObserver<AddResponse> responseObserver) { int result = request.getOperand1() + request.getoperand2(); AddResponse response = AddResponse.newBuilder().setResult(result).build(); responseObserver.onNext(response); responseObserver.onCompleted(); } @Override public void multiply(MultiplyRequest request, StreamObserver<MultiplyResponse> responseObserver) { int result = request.getoperand1() * request.getoperand2(); MultiplyResponse response = MultiplyResponse.newBuilder().setResult(result).build(); responseObserver.onNext(response); responseObserver.onCompleted(); }}
步骤 4: 创建服务器接下来,我们需要创建一个 gRPC 处理客户端请求的服务器。
package com.example.grpc.calculator;import io.grpc.Server;import io.grpc.ServerBuilder;import java.io.IOException;public class CalculatorServer { private Server server; public void start() throws IOException { int port = 50051; server = ServerBuilder.forPort(port) .addService(new CalculatorService()) .build() .start(); System.out.println("Server started, listening on " + port); Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.err.println("Shutting down gRPC server"); CalculatorServer.this.stop(); System.err.println("Server shut down"); })); } public void stop() { if (server != null) { server.shutdown(); } } public void blockUntilShutdown() throws InterruptedException { if (server != null) { server.awaitTermination(); } } public static void main(String[] args) throws IOException, InterruptedException { CalculatorServer calculatorServer = new CalculatorServer(); calculatorServer.start(); calculatorServer.blockUntilShutdown(); }}
步骤 5: 创建客户端最后,我们需要创建一个 gRPC 可调用远程服务的客户端。
package com.example.grpc.calculator;import io.grpc.ManagedChannel;import io.grpc.ManagedChannelBuilder;public class CalculatorClient { private final ManagedChannel channel; private final CalculatorServiceGrpc.CalculatorServiceBlockingStub blockingStub; public CalculatorClient(String host, int port) { channel = ManagedChannelBuilder.forAddress(host, port) .usePlaintext() .build(); blockingStub = CalculatorServiceGrpc.newBlockingStub(channel); } public void shutdown() throws InterruptedException { channel.shutdown().awaitTer
