接第01部分,本节用来说明Java语言的代码实现。
使用Protoc.exe生成java代码之后,会生成两个java文件,Client与Server都需要包含这两个文件。
首先是Server端:
1、新建一个java项目,引用以下jar包
protobuf-java-3.0.0-beta-2.jar
grpc-all-0.13.1.jar
guava-18.0.jar
netty-all-4.1.0.CR1.jar
okhttp-2.5.0.jar
okio-1.6.0.jar
2、项目中添加生成的两个java文件。
3、新建一个类MyGRPCServer,实现JustATestGrpc.JustATest接口
package com.neohope.protobuf.grpc.test;
import io.grpc.stub.StreamObserver;
public class MyGRPCServer implements JustATestGrpc.JustATest{
@Override
public void add(JustATestOuterClass.AddRequest request, StreamObserver<JustATestOuterClass.AddResponse> responseObserver) {
JustATestOuterClass.AddResponse rsp = JustATestOuterClass.AddResponse.newBuilder().setC(request.getA() + request.getB()).build();
responseObserver.onNext(rsp);
responseObserver.onCompleted();
}
@Override
public void sayHelloTo(JustATestOuterClass.Person request, StreamObserver<JustATestOuterClass.HelloResponse> responseObserver) {
JustATestOuterClass.HelloResponse rsp = JustATestOuterClass.HelloResponse.newBuilder().setRsp("Hello "+ request.getName()).build();
responseObserver.onNext(rsp);
responseObserver.onCompleted();
}
}
4、修改TestServer.java
package com.neohope.protobuf.grpc.test;
import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.netty.NettyServerBuilder;
import java.io.IOException;
import java.util.Scanner;
public class TestServer {
public static void main(String[] args) throws IOException {
Server server = NettyServerBuilder.forPort(1900)
.addService(JustATestGrpc.bindService(new MyGRPCServer()))
.build()
.start();
Scanner scanner =new Scanner(System.in);
scanner.nextLine();
}
}
5、编译运行
然后是Client端:
1、新建一个java项目,引用以下jar包
protobuf-java-3.0.0-beta-2.jar
grpc-all-0.13.1.jar
guava-18.0.jar
netty-all-4.1.0.CR1.jar
okhttp-2.5.0.jar
okio-1.6.0.jar
2、项目中添加生成的两个java文件。
3、修改TestClient.java
package com.neohope.protobuf.grpc.test;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
public class TestClient {
public static void main(String[] args)
{
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 1900)
.usePlaintext(true)
.build();
JustATestGrpc.JustATestBlockingStub blockingStub = JustATestGrpc.newBlockingStub(channel);
JustATestOuterClass.AddRequest areq = JustATestOuterClass.AddRequest.newBuilder().setA(1).setB(2).build();
JustATestOuterClass.AddResponse arsp = blockingStub.add(areq);
System.out.println(arsp.getC());
JustATestOuterClass.Person preq = JustATestOuterClass.Person.newBuilder().setAge(30).setName("neohope").setSex(JustATestOuterClass.Person.SexType.MALE).build();
JustATestOuterClass.HelloResponse prsp = blockingStub.sayHelloTo(preq);
System.out.println(prsp.getRsp());
channel.shutdown();
}
}
4、编译运行
