GRPC学习
1 GRPC配合java的简单应用
1.1 项目生成
用IDEA生成的一个Springboot应用。(这边是因为要做一个web项目,也可以只生成一个普通的带maven的java项目)。先放出一个整体的项目结构图,这个结构图的一些文件是整个项目编译(target文件夹中的文件)好才生成的。
1.2 添加依赖
首先是添加一下grpc对应的依赖。
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.26.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.26.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.26.0</version>
</dependency>
除了以上方法,还可以像如下的方式添加全面的依赖,但是导入的依赖项比较多。
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>1.26.0</version>
</dependency>
添加完依赖后,需要再添加一个build项,这些build的配置,是我们在做这个GRPC项目之前要用maven先compile一下,不然很多依赖是缺少的。
1.3 编写proto文件
helloworld.proto文件的路径是src/main/java/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 greetings
message HelloReply {
string message = 1;
}
1.4 服务端
HelloWorldServer.java,其中 io.grpc.examples 是先编译完才有的,一开始没有编译是会报错的。
package com.example.lbh;
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.