grpc java helloworld 简单demo实现

来源:互联网 发布:纸模型软件 编辑:程序博客网 时间:2024/05/02 00:16

写在前面

最近google发布了grpc1.0,之前一直关注过grpc,数据交互使用了protocol buffer,相比之前使用的hession和json序列化方式性能应该提升不少,所有先搞一个grpc的hello world跑一下,项目使用maven搭建,并使用idea开发。

使用idea创建maven项目,添加pom配置

添加grpc1.0 maven依赖

        <dependency>            <groupId>io.grpc</groupId>            <artifactId>grpc-netty</artifactId>            <version>1.0.0</version>        </dependency>        <dependency>            <groupId>io.grpc</groupId>            <artifactId>grpc-protobuf</artifactId>            <version>1.0.0</version>        </dependency>        <dependency>            <groupId>io.grpc</groupId>            <artifactId>grpc-stub</artifactId>            <version>1.0.0</version>        </dependency>

配置protobuf maven插件

配置了protobuf 插件后,可以自动将.proto文件生成对应的java代码

<build>        <extensions>            <extension>                <groupId>kr.motd.maven</groupId>                <artifactId>os-maven-plugin</artifactId>                <version>1.4.1.Final</version>            </extension>        </extensions>        <plugins>            <plugin>                <groupId>org.xolstice.maven.plugins</groupId>                <artifactId>protobuf-maven-plugin</artifactId>                <version>0.5.0</version>                <configuration>                    <protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}</protocArtifact>                    <pluginId>grpc-java</pluginId>                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.0:exe:${os.detected.classifier}</pluginArtifact>                </configuration>                <executions>                    <execution>                        <goals>                            <goal>compile</goal>                            <goal>compile-custom</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build>

编写proto文件 helloworld.proto

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 greetingsmessage HelloReply {  string message = 1;}

编写grpc 服务端HelloWorldServer.java

package com;import io.grpc.Server;import io.grpc.ServerBuilder;import io.grpc.examples.helloworld.GreeterGrpc;import io.grpc.examples.helloworld.HelloReply;import io.grpc.examples.helloworld.HelloRequest;import io.grpc.stub.StreamObserver;import java.io.IOException;public class HelloWorldServer {    private int port = 50051;    private Server server;    private void start() throws IOException {        server = ServerBuilder.forPort(port)                .addService(new GreeterImpl())                .build()                .start();        System.out.println("service start...");        Runtime.getRuntime().addShutdownHook(new Thread() {            @Override            public void run() {                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();        }    }    // block 一直到退出程序     private void blockUntilShutdown() throws InterruptedException {        if (server != null) {            server.awaitTermination();        }    }    public static void main(String[] args) throws IOException, InterruptedException {        final HelloWorldServer server = new HelloWorldServer();        server.start();        server.blockUntilShutdown();    }    // 实现 定义一个实现服务接口的类     private class GreeterImpl extends GreeterGrpc.GreeterImplBase {        public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {            System.out.println("service:"+req.getName());            HelloReply reply = HelloReply.newBuilder().setMessage(("Hello: " + req.getName())).build();            responseObserver.onNext(reply);            responseObserver.onCompleted();        }    }} 

编写grpc 客户端 HelloWorldClient.java

package com;import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder;import io.grpc.examples.helloworld.GreeterGrpc; import io.grpc.examples.helloworld.HelloReply; import io.grpc.examples.helloworld.HelloRequest;import java.util.concurrent.TimeUnit; public class HelloWorldClient {    private final ManagedChannel channel;     private final GreeterGrpc.GreeterBlockingStub blockingStub;     public HelloWorldClient(String host,int port){         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 greet(String name){         HelloRequest request = HelloRequest.newBuilder().setName(name).build();         HelloReply   response = blockingStub.sayHello(request);        System.out.println(response.getMessage());    }    public static void main(String[] args) throws InterruptedException {         HelloWorldClient client = new HelloWorldClient("127.0.0.1",50051);        for(int i=0;i<5;i++){            client.greet("world:"+i);        }    } }

项目完整结构

这里写图片描述

项目运行结果

服务端

这里写图片描述

客户端

这里写图片描述

0 1
原创粉丝点击