java中使用GRPC,搭建RPCserver

1.pom.xml中加入依赖

io.grpc grpc-netty-shaded 1.20.0 io.grpc grpc-protobuf 1.20.0 io.grpc grpc-stub 1.20.0

2.pom.xml中加入基于protobuf的代码生成插件
kr.motd.maven os-maven-plugin 1.5.0.Final org.xolstice.maven.plugins protobuf-maven-plugin 0.5.1 com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}grpc-javaio.grpc:protoc-gen-grpc-java:1.20.0:exe:${os.detected.classifier} compile compile-custom

3.在src/main/proto文件夹下,新建proto文件,例如holleworld.proto:
// Copyright 2015 The gRPC Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // //http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.examples.helloworld"; option java_outer_classname = "HelloWorldProto"; option objc_class_prefix = "HLW"; package helloworld; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} }// The request message containing the user's name. message HelloRequest { string name = 1; }// The response message containing the greetings message HelloReply { string message = 1; }

【java中使用GRPC,搭建RPCserver】4.生成相关代码 mvn package,生成的代码在target/generated-sources下
5.实现HelloWorld接口,新建HelloWorldServer.java,如下:
public class HelloWorldServer { private static final Logger logger = Logger.getLogger(HelloWorldServer.class.getName()); private Server server; public void start() throws IOException { /* The port on which the server should run */ int port = 50051; server = ServerBuilder.forPort(port) .addService(new GreeterImpl()) .build() .start(); logger.info("Server started, listening on " + port); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { // Use stderr here since the logger may have been reset by its JVM shutdown hook. System.err.println("*** shutting down gRPC server since JVM is shutting down"); HelloWorldServer.this.stop(); System.err.println("*** server shut down"); } }); }private void stop() { if (server != null) { server.shutdown(); } }/** * Await termination on the main thread since the grpc library uses daemon threads. */ public void blockUntilShutdown() throws InterruptedException { if (server != null) { server.awaitTermination(); } }/** * Main launches the server from the command line. */ public static void main(String[] args) throws IOException, InterruptedException { final HelloWorldServer server = new HelloWorldServer(); server.start(); server.blockUntilShutdown(); }static class GreeterImpl extends GreeterGrpc.GreeterImplBase {@Override public void sayHello(HelloRequest req, StreamObserver responseObserver) { HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build(); responseObserver.onNext(reply); responseObserver.onCompleted(); } } }

6.运行HelloWorldServer,开始监听端口50051。完成server搭建

    推荐阅读