3.安装插件:Protobuf Support 4.在main文件夹下创建proto文件夹。注意:proto文件夹和java文件夹在同一目录4.0.0 org.springframework.boot spring-boot-starter-parent2.6.1 com.example demo0.0.1-SNAPSHOT demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest com.google.protobuf protobuf-java3.5.1 io.grpc grpc-all1.12.0 kr.motd.maven os-maven-plugin1.4.1.Final org.xolstice.maven.plugins protobuf-maven-plugin0.5.0 com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier} grpc-java io.grpc:protoc-gen-grpc-java:1.0.0:exe:${os.detected.classifier} compile compile-custom
syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.justtest"; option java_outer_classname = "JustTestProto"; option objc_class_prefix = "WY"; package onlytest; //定义服务 service Greeter { //注意:这里是returns 不是return rpc TestSomeThing (TestRequest) returns (TestResponse) { } } //定义消息类型 message TestRequest { string name = 1; } message TestResponse { string message = 1; }5.执行maven中install,在target文件夹下generated-sources中生成GreeterGrpc等一系列文件 6.服务端代码
package com.example.test; import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.justtest.GreeterGrpc; import io.grpc.justtest.TestRequest; import io.grpc.justtest.TestResponse; import io.grpc.stub.StreamObserver; import java.io.IOException; public class TestServer { //定义端口 private final int port = 50051; //服务 private Server server; //启动服务,并且接受请求 private void start() throws IOException { server = ServerBuilder.forPort(port).addService(new GreeterImpl()).build().start(); System.out.println("服务开始启动-------"); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.err.println("------shutting down gRPC server since JVM is shutting down-------"); TestServer.this.stop(); System.err.println("------server shut down------"); } }); } //stop服务 private void stop() { if (server != null) { server.shutdown(); } } //server阻塞到程序退出 private void blockUntilShutdown() throws InterruptedException { if (server!=null){ server.awaitTermination(); } } //实现服务接口的类 private class GreeterImpl extends GreeterGrpc.GreeterImplbase { @Override public void testSomeThing(TestRequest request, StreamObserver7.客户端代码responseObserver) { TestResponse build = TestResponse.newBuilder().setMessage(request.getName()).build(); //onNext()方法向客户端返回结果 responseObserver.onNext(build); //告诉客户端这次调用已经完成 responseObserver.onCompleted(); } } public static void main(String[] args) throws IOException, InterruptedException { final TestServer server=new TestServer(); server.start(); server.blockUntilShutdown(); } }
package com.example.test; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.grpc.justtest.GreeterGrpc; import io.grpc.justtest.TestRequest; import io.grpc.justtest.TestResponse; import java.util.concurrent.TimeUnit; public class TestClient { private final ManagedChannel channel; private final GreeterGrpc.GreeterBlockingStub blockingStub; private static final String host="127.0.0.1"; private static final int ip=50051; public TestClient(String host,int port){ //usePlaintext表示明文传输,否则需要配置ssl //channel 表示通信通道 channel= ManagedChannelBuilder.forAddress(host, port).usePlaintext(true).build(); //存根 blockingStub=GreeterGrpc.newBlockingStub(channel); } public void shutdown() throws InterruptedException { channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); } public void testResult(String name){ TestRequest request=TestRequest.newBuilder().setName(name).build(); TestResponse response=blockingStub.testSomeThing(request); System.out.println(response.getMessage()); } public static void main(String[] args) { TestClient client=new TestClient(host,ip); for (int i=0;i<=5;i++){ client.testResult("<<<<8.启动测试:先启动服务,后启动客户端>>>>:"+i); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)