springboot3.0集成grpc
| Java
评论 0 | 点赞 0 | 浏览 15

网上很多集成gprc的教程都是基于springboot2.x的,这里我提供springboot3.0的集成方案。

一、引入依赖

以下的maven依赖版本在springboot3.0上测试通过,不推荐更改

 <dependency>
            <groupId>net.devh</groupId>
            <artifactId>grpc-spring-boot-starter</artifactId>
            <version>3.1.0.RELEASE</version> <!-- 使用最新版本 -->
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>1.74.0</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.74.0</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.74.0</version>
        </dependency>
        <dependency> <!-- necessary for Java 9+ -->
            <groupId>org.apache.tomcat</groupId>
            <artifactId>annotations-api</artifactId>
            <version>6.0.53</version>
            <scope>provided</scope>
        </dependency>


二、安装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<string, string> 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<DataResponse> responseObserver) {
        log.info("===============收到grpc请求=================");
        String requestId = request.getRequestId();
        Map<String, String> 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请求


结束,就先分享到这里

本文作者:不是好驴
本文链接:https://www.baddonkey.cn/detail/56
版权声明:原创文章,允许转载,转载请注明出处

高谈阔论

留言列表