grpc java 项目_gRPC示例初探【实战笔记】

目录

一、运行示例代码

1.下载源代码

2.编译Client和Server

3.运行Server

4.运行Client

二、增加方法示例

1.proto在中增加SayHelloAgain方法

2.Server端实现sayHelloAgain方法

3.Client端增加调用方法

4.运行示例

三、Maven项目中运行示例

1.添加依赖和proto生成代码插件

2.运行工程示例

四、小结

五、系列文章

一、运行示例代码

1.下载源代码

git clone -b v1.25.0 https://github.com/grpc/grpc-java

cd grpc-java/examples

2.编译Client和Server

./gradlew installDist

BUILD SUCCESSFUL in 1s

14 actionable tasks: 9 executed, 5 up-to-date

3.运行Server

./build/install/examples/bin/hello-world-server

十一月 10, 2019 3:55:16 下午 io.grpc.examples.helloworld.HelloWorldServer start

信息: Server started, listening on 50051

4.运行Client

./build/install/examples/bin/hello-world-client

十一月 10, 2019 4:05:00 下午 io.grpc.examples.helloworld.HelloWorldClient greet

信息: Will try to greet world ...

十一月 10, 2019 4:05:01 下午 io.grpc.examples.helloworld.HelloWorldClient greet

信息: Greeting: Hello world

备注:Will try to greet world ...这条日志在Client端访问Server前打印;Greeting: Hello world 这条日志在Server返回给Client后打印。

二、增加方法示例

1.proto在中增加SayHelloAgain方法

代码位置:src/main/proto/helloworld.proto

// The greeting service definition.

service Greeter {

// Sends a greeting

rpc SayHello (HelloRequest) returns (HelloReply) {}

// Sends another greeting

rpc SayHelloAgain (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;

}

编译后会在GreeterImplBase类中生成sayHelloAgain方法内容如下:

public void sayHelloAgain(io.grpc.examples.helloworld.HelloRequest request,

io.grpc.stub.StreamObserver responseObserver) {

asyncUnimplementedUnaryCall(getSayHelloAgainMethod(), responseObserver);

}

2.Server端实现sayHelloAgain方法

代码位置:

src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java

private 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();

}

@Override

public void sayHelloAgain(HelloRequest req, StreamObserver responseObserver) {

HelloReply reply = HelloReply.newBuilder().setMessage("Hello again " + req.getName()).build();

responseObserver.onNext(reply);

responseObserver.onCompleted();

}

}

3.Client端增加调用方法

代码位置:src/main/java/io/grpc/examples/helloworld/HelloWorldClient.java

public void greet(String name) {

logger.info("Will try to greet " + name + " ...");

HelloRequest request = HelloRequest.newBuilder().setName(name).build();

HelloReply response;

try {

response = blockingStub.sayHello(request);

} catch (StatusRuntimeException e) {

logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());

return;

}

logger.info("Greeting: " + response.getMessage());

try {

response = blockingStub.sayHelloAgain(request);

} catch (StatusRuntimeException e) {

logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());

return;

}

logger.info("Greeting: " + response.getMessage());

}

4.运行示例

编译Client和Server

./gradlew installDist

> Task :compileJava

警告: [options] 未与 -source 1.7 一起设置引导类路径

1 个警告

BUILD SUCCESSFUL in 1s

14 actionable tasks: 3 executed, 11 up-to-date

运行Server

./build/install/examples/bin/hello-world-server

十一月 10, 2019 4:53:53 下午 io.grpc.examples.helloworld.HelloWorldServer start

信息: Server started, listening on 50051

运行Client

./build/install/examples/bin/hello-world-client

十一月 10, 2019 4:53:56 下午 io.grpc.examples.helloworld.HelloWorldClient greet

信息: Will try to greet world ...

十一月 10, 2019 4:53:57 下午 io.grpc.examples.helloworld.HelloWorldClient greet

信息: Greeting: Hello world

十一月 10, 2019 4:53:57 下午 io.grpc.examples.helloworld.HelloWorldClient greet

信息: Greeting: Hello again world

Server端新增的SayHelloAgain被执行,返回给客户端并打印。

三、Maven项目中运行示例

1.添加依赖和proto生成代码插件

UTF-8

UTF-8

1.8

1.25.0

3.10.0

3.10.0

io.grpc

grpc-netty-shaded

1.25.0

io.grpc

grpc-protobuf

${grpc.version}

io.grpc

grpc-stub

${grpc.version}

com.google.protobuf

protobuf-java-util

${protobuf.version}

kr.motd.maven

os-maven-plugin

1.6.2

org.xolstice.maven.plugins

protobuf-maven-plugin

0.6.1

com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier}

grpc-java

io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}

compile

compile-custom

org.apache.maven.plugins

maven-compiler-plugin

6

6

备注:将上面例子中的helloworld.proto拷贝到该工程下,在编译时在target下自动生成相应的代码,将生成的代码拷贝到工程里,并将上面示例中的Client实现HelloWorldClient和Server端实现类HelloWorldServer拷贝到工程中。结构如下所示:

2.运行工程示例

Server运行

87c35df119054a6fde33961d7cd91e5c.png

Client运行

四、小结

本文从官方给出的gRPC-java示例开始,从命令行和项目工程两种方式来运行Client向Server端调用示例,对gRPC有较直观的印象。

五、系列文章

「瓜农老梁  学习同行」

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值