.Net Grpc Client调用Java Grpc Server

发布时间 2023-05-17 14:30:35作者: SpringCore

1. Java Grpc Server

参考地址:

1.新建SpringBoot项目[略]

2.POM引入相关依赖

    <dependencies>
         <dependency>
            <groupId>io.github.lognet</groupId>
            <artifactId>grpc-spring-boot-starter</artifactId>
            <version>5.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.23.0</version>
        </dependency>
    </dependencies>
    <build>
        <extensions>
            <!-- 检测当前系统信息的工具-->
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.7.1</version>
            </extension>
        </extensions>
        <plugins>
            <plugin>
                <groupId>org.xolstice.maven.plugins</groupId>
                <artifactId>protobuf-maven-plugin</artifactId>
                <version>0.6.1</version>
                <configuration>
                    <!-- 通过系统信息的工具变量获取操作系统的版本 -->
                    <protocArtifact>com.google.protobuf:protoc:3.23.0:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.55.1:exe:${os.detected.classifier}</pluginArtifact>
                    <!--默认值,proto源文件路径-->
                    <protoSourceRoot>${project.basedir}/src/main/java/cn/coreqi/dapr_server/proto</protoSourceRoot>
                    <!--默认值,proto目标java文件路径-->
                    <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                    <!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true,设置为false时也会覆盖同名文件-->
                    <clearOutputDirectory>false</clearOutputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <!--在执行mvn compile的时候会执行以下操作-->
                        <phase>compile</phase>
                        <goals>
                            <!--生成OuterClass类-->
                            <goal>compile</goal>
                            <!--生成Grpc类-->
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3.编写proto文件

syntax = "proto3";


option java_multiple_files = true;
option java_package = "cn.coreqi.dapr_server.protobuf";
option java_outer_classname = "HelloWorldProto";


service HelloWorld {
  rpc Say (SayRequest) returns (SayResponse) {}
}

message SayRequest {
  string message = 1;
}

message SayResponse {
  string message = 1;
  string timestamp = 2;
}

4.使用插件生成相关文件

image

5.编写服务的实现

package cn.coreqi.dapr_server.services;

import cn.coreqi.dapr_server.protobuf.HelloWorldGrpc;
import cn.coreqi.dapr_server.protobuf.SayRequest;
import cn.coreqi.dapr_server.protobuf.SayResponse;
import io.grpc.stub.StreamObserver;
import org.lognet.springboot.grpc.GRpcService;

@GRpcService
public class HelloWorldServiceImpl extends HelloWorldGrpc.HelloWorldImplBase {
    @Override
    public void say(SayRequest request, StreamObserver<SayResponse> responseObserver) {
        SayResponse response = SayResponse.newBuilder()
                .setMessage("你好," + request.getMessage())
                .setTimestamp(Long.valueOf(System.currentTimeMillis()).toString())
                .build();
        responseObserver.onNext(response);
        responseObserver.onCompleted();
    }
}

6.修改相关配置

grpc.port=8081

2..NET Grpc Client

1.新建控制台项目[略]

2.引入相关依赖