>  기사  >  Java  >  springboot 데모와 maven grpc를 통합하는 방법

springboot 데모와 maven grpc를 통합하는 방법

王林
王林앞으로
2023-05-13 13:01:26765검색

    1. 설명

    GRPC는 protobuf를 기반으로 인터페이스를 정의합니다. 서버측과 클라이언트측으로 나누어집니다. 서버 측은 인터페이스 구현을 제공하고 클라이언트는 서버 측 인터페이스를 호출하여 예상 데이터를 얻습니다.

    2. 공개 부분

    2.1 종속성 추가

            <dependency>
                <groupId>net.devh</groupId>
                <artifactId>grpc-spring-boot-starter</artifactId>
                <version>2.12.0.RELEASE</version>
            </dependency>
            <dependency>
                <!-- Java 9+ compatibility -->
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
            </dependency>

    플러그인 추가(참고: wagon-provider-api를 자동으로 도입할 수 없는 경우 지금 종속성에 도입하여 종속성 다운로드를 용이하게 한 다음 삭제할 수 있습니다. 종속성 좌표)

    <plugin>
                    <!--                    protobuf生成插件-->
                    <groupId>org.xolstice.maven.plugins</groupId>
                    <artifactId>protobuf-maven-plugin</artifactId>
                    <version>0.6.1</version>
                    <configuration>
                        <protocArtifact>com.google.protobuf:protoc:3.17.3:exe:${os.detected.classifier}
                        </protocArtifact>
                        <pluginId>grpc-java</pluginId>
                        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.39.0:exe:${os.detected.classifier}
                        </pluginArtifact>
                        <!--默认值-->
                        <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
                        <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                        <clearOutputDirectory>false</clearOutputDirectory>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>compile-custom</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

    2.2 proto 종속성 파일 추가

    src/main/proto 디렉터리를 추가하고 해당 디렉터리를 Source Root로 설정한 다음 src/main/proto 아래에 hello.proto 파일을 추가하면 내용은 다음과 같습니다src/main/proto,并将目录设置为Source Root,然后在目录src/main/proto下添加文件hello.proto,内容如下

    syntax = "proto3"; //指定proto版本
    package com.server;
    // 生成的Java代码的包名
    option java_package = "com.grpc.server";
    // 请求参数
    message HelloReq{
        string name = 1;
    }
    // 返回参数
    message HelloResp{
        string ret = 1;
    }
    // rpc service
    service HelloService{
    	// service中需要进行调用的具体方法
        rpc hello(HelloReq) returns (HelloResp){}
    }

    2.3 通过protobuf生成Java代码

    插件导入成功后,点击下图选中的protobuf:compileprotbuf:compile-custom

    import io.grpc.stub.StreamObserver;
    import net.devh.boot.grpc.server.service.GrpcService;
    @GrpcService
    public class HelloService extends HelloServiceGrpc.HelloServiceImplBase {
        @Override
        public void hello(Hello.HelloReq request, StreamObserver<Hello.HelloResp> responseObserver) {
            Hello.HelloResp resp = Hello.HelloResp.newBuilder().setRet("你好-->"+request.getName()).build();
            responseObserver.onNext(resp);
            responseObserver.onCompleted();
        }
    }

    2.3 protobuf를 통해 Java 코드 생성

    springboot 데모와 maven grpc를 통합하는 방법플러그인을 성공적으로 가져온 후 , 아래 그림에서 선택한 protobuf:compile을 클릭하고 protbuf:compile-custom에 해당하는 Java 코드(즉, 인터페이스 종속성 코드)를 순차적으로 생성합니다

    3 서버 측 인터페이스

    서비스 코드의 구체적인 구현은 다음과 같습니다

    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    @SpringBootTest
    public class GrpcTest {
        @Autowired
        private HelloSerivce helloSerivce;
        @Test
        public void test1() throws  Exception{
            helloSerivce.haha("牛哈哈");
        }
    }

    4 클라이언트 측 인터페이스🎜🎜클라이언트 측 테스트 호출 코드의 구체적인 구현은 다음과 같습니다🎜rrreee

    위 내용은 springboot 데모와 maven grpc를 통합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제