网上很多集成gprc的教程都是基于springboot2.x的,这里我提供springboot3.0的集成方案。
一、引入依赖
以下的maven依赖版本在springboot3.0上测试通过,不推荐更改
net.devh
grpc-spring-boot-starter
3.1.0.RELEASE
io.grpc
grpc-netty-shaded
1.74.0
runtime
io.grpc
grpc-protobuf
1.74.0
io.grpc
grpc-stub
1.74.0
org.apache.tomcat
annotations-api
6.0.53
provided
二、安装protoc编译器
下载地址:https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.25.5/
windows系统选择protoc-3.25.5-windows-x86_64.exe
下载完成后将文件名重命名为protoc.exe,并找个文件夹存起来,这里我存到C:\software\protobuf\bin下。
然后将C:\software\protobuf\bin配置到环境变量系统变量的Path下。
配置完成后命令行运行protoc --version检查环境变量设置是否成功。
三、安装 protoc-gen-grpc-java 插件
下载地址:https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.74.0/windows系统选择protoc-gen-grpc-java-1.74.0-windows-x86_64.exe
四、编写.proto文件
在项目的src/main/proto下,新建文件example_service.proto
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.xxx.grpc.demo";
option java_outer_classname = "ExampleServiceProto";
service ExampleService {
rpc GetData (DataRequest) returns (DataResponse) {}
}
message DataRequest {
string request_id = 1;
map parameters = 2;
}
message DataResponse {
int32 status = 1;
string data_json = 2;
}
五、生成代码
命令行执行如下命令:
protoc --java_out=./ --grpc-java_out=./ --plugin=protoc-gen-grpc-java=C:/software/protobuf/protoc-gen-grpc-java-1.74.0-windows-x86_64.exe example_service.proto
其中,需要替换两处地方,一处是protoc-gen-grpc-java-1.74.0-windows-x86_64.exe的地址,另一处是example_service.proto的地址
运行后会在当前目录下生成相关 Java 代码,生成的代码应该包含以下文件:
DataRequest.java
DataRequestOrBuilder.java
DataResponse.java
DataResponseOrBuilder.java
ExampleServiceGrpc.java
ExampleServiceProto.java
将代码复制到项目代码中,注意:不要尝试手动去修改生成的代码
六、编写服务类
上一步已经生成好了相关代码,我们直接创建一个GrpcDemoService类,去继承生成的ExampleServiceGrpc.ExampleServiceImplBase,重写其getData方法;
import com.alibaba.fastjson.JSON;
import com.xxx.grpc.demo.DataRequest;
import com.xxx.grpc.demo.DataResponse;
import com.xxx.grpc.demo.ExampleServiceGrpc;
import io.grpc.stub.StreamObserver;
import lombok.extern.slf4j.Slf4j;
import net.devh.boot.grpc.server.service.GrpcService;
import java.util.Map;
@Slf4j
@GrpcService
public class GrpcDemoService extends ExampleServiceGrpc.ExampleServiceImplBase {
@Override
public void getData(DataRequest request, StreamObserver responseObserver) {
log.info("===============收到grpc请求=================");
String requestId = request.getRequestId();
Map parameters = request.getParametersMap();
log.info(requestId);
log.info(JSON.toJSONString(parameters));
DataResponse response = DataResponse.newBuilder().setStatus(2).setDataJson("{}").build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}
不要忘了在类上添加 @GrpcService 注解,这样就能自动的将getData()方法暴露出去供客户端进行grpc调用
七、测试grpc服务
默认情况下,grpc服务将监听 9090 端口,如果你希望更改端口号,可以在配置文件中添加以下内容:
grpc.server.port=8080
测试工具建议直接在idea中新建http文件,按照如下格式编写请求:
点击左侧的绿色三角符号可以直接发送请求。
也可以通过postman测试,postman支持新建grpc请求
结束,就先分享到这里
高谈阔论