grpc测试
GreetingServiceImpl.java
package org.example; import io.grpc.stub.StreamObserver; import org.example.grpcdemo.GreetingServiceGrpc; import org.example.grpcdemo.HelloMessage; public class GreetingServiceImpl extends GreetingServiceGrpc.GreetingServiceImplBase { @Override public void sayHello(HelloMessage.HelloRequest request, StreamObserver<HelloMessage.HelloResponse> responseObserver) { String name = request.getName(); String message = "Hello, " + name + "!"; HelloMessage.HelloResponse response = HelloMessage.HelloResponse.newBuilder() .setMessage(message) .build(); responseObserver.onNext(response); responseObserver.onCompleted(); } }
GrpcServer.java
package org.example; import io.grpc.Server; import io.grpc.ServerBuilder; public class GrpcServer { public static void main(String[] args) throws Exception { Server server = ServerBuilder.forPort(9595) .addService(new GreetingServiceImpl()) // 注册服务实现 .build() .start(); System.out.println("Server started on port 9595"); server.awaitTermination(); System.out.println("Server exited"); } }
GrpcClient.java
package org.example; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.grpc.stub.StreamObserver; import org.example.grpcdemo.GreetingServiceGrpc; import org.example.grpcdemo.HelloMessage; public class GrpcClient { public static void main(String[] args) { ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 9595) .usePlaintext() // 如果使用 TLS,去掉这行 .build(); // 同步调用(阻塞式) GreetingServiceGrpc.GreetingServiceBlockingStub blockingStub = GreetingServiceGrpc.newBlockingStub(channel); HelloMessage.HelloRequest request = HelloMessage.HelloRequest.newBuilder() .setName("World") .build(); HelloMessage.HelloResponse response = blockingStub.sayHello(request); System.out.println("Response: " + response.getMessage()); // 异步调用(非阻塞式) GreetingServiceGrpc.GreetingServiceStub asyncStub = GreetingServiceGrpc.newStub(channel); asyncStub.sayHello(request, new StreamObserver<HelloMessage.HelloResponse>() { @Override public void onNext(HelloMessage.HelloResponse response) { System.out.println("Async Response: " + response.getMessage()); } @Override public void onError(Throwable t) { t.printStackTrace(); } @Override public void onCompleted() { System.out.println("RPC completed"); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } channel.shutdown(); System.out.println("Client shutdown"); } }