当前位置:   article > 正文

java对接grpc接口详解_java调用grpc服务

java调用grpc服务

文档说明

通过java的方式对接grpc接口,在java项目中属于第一次对接,编写文档记录一下,方便后期的对接,增加对接效率。

对接细节

一.项目架构
后端采用Spring Boot、Spring Security、
Redis & Jwt

二.对接细节
1.pom中导入grpc需要的包依赖
下面展示一些 内联代码片

<!-- grpc -->
<protobuf.version>3.5.1</protobuf.version>
<protobuf-plugin.version>0.6.1</protobuf-plugin.version>
<grpc.version>1.42.1</grpc.version>
  • 1
  • 2
  • 3
  • 4

三.项目中添加protobuf-maven编译插件

<plugin>
    <groupId>org.xolstice.maven.plugins</groupId>
    <artifactId>protobuf-maven-plugin</artifactId>
    <version>${protobuf-plugin.version}</version>
    <configuration>
        <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
        <!--默认值-->
        <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
        <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
        <!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true,设置为false时也会覆盖同名文件-->
        <clearOutputDirectory>false</clearOutputDirectory>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>compile-custom</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述

确定编译插件生效及指定文件生成目录
在这里插入图片描述

四.同级目录添加proto文件
在这里插入图片描述

指定输出地址
在这里插入图片描述

生成的文件在我们指定的目录下面
在这里插入图片描述

五.配置grpc地址及相关信息

grpc:
  client:
    local-grpc-server:
      address: 'static://10.251.21.20:31484'
      enableKeepAlive: true
      keepAliveWithoutCalls: true
      negotiationType: plaintext
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

六.grpc简单调用实例

@GrpcClient("local-grpc-server")
private EngineGrpc.EngineBlockingStub engineStub;


public String sendMessage() {
    try {
        final EngineGrpcProto.AsyncReply response = engineStub.scanAsync(EngineGrpcProto.ScanAsyncParams.newBuilder()
                .setApkUrl("xxx")
                .setReqId("1234-12345678-12345678-12345678-123456")
                .setCateOpt(65535)
                .setScanOpt(18999035)
                .setExtendFuncOpt(11)
                .setTimeout(600)
                .setEngineVer("292-pc64")
                .setVirusLibUrl("xxx")
                .setLicenseUrl("xxx")
                .setCallbackUrl("someurl")
                .setPriority(12)
                .setWaitUntil(Timestamp.newBuilder()
                        .setNanos(0)
                        .setSeconds(1661258870)
                        .build())
                .addApi(0, EngineGrpcProto.Api.newBuilder()
                        .setCmd("GetAllVirNames")
                        .build()
                )
                .build()
        );
        return response.getReqId();
    } catch (final StatusRuntimeException e) {
        return "FAILED with " + e.getStatus().getCode().name();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/145990
推荐阅读
相关标签
  

闽ICP备14008679号