美文网首页
java grpc快速入门

java grpc快速入门

作者: 清蒸三文鱼_ | 来源:发表于2024-01-03 12:01 被阅读0次

    pom.xml

    protobuf-maven-plugin里protobuf.versiongrpc.version可从maven获取最新版本

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>grpc_demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <os.detected.classifier>windows-x86_64</os.detected.classifier>
            <grpc.version>1.60.1</grpc.version>
            <protobuf.version>3.25.1</protobuf.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-netty-shaded</artifactId>
                <version>${grpc.version}</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-protobuf</artifactId>
                <version>${grpc.version}</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-stub</artifactId>
                <version>${grpc.version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.xolstice.maven.plugins</groupId>
                    <artifactId>protobuf-maven-plugin</artifactId>
                    <version>0.6.1</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>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>compile-custom</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    步骤

    目录结构
    1. src/main/proto目录编写user.proto文件
    syntax = "proto3";
    message UserRequest {
      string name = 1;
      string age = 2;
    }
    message UserResponse {
      string birthday = 1;
      string city = 2;
    }
    service UserService {
      rpc searchBirthdayAndCity(UserRequest) returns (UserResponse);
    }
    
    1. 点击maven工具protobuf:compile和protobuf:compile-custom, 编译生成java文件


    2. 经过步骤2之后, 会在target目录下生成两个java文件, 将这两个文件拷贝到工程目录中


    3. 编写server和client的代码, 分别启动server和client的main()方法
    • server
    public static void main(String[] args) throws Exception {
            io.grpc.Server server = ServerBuilder.forPort(8088)
                    .addService(new UserServiceGrpc.UserServiceImplBase() {
                        @Override
                        public void searchBirthdayAndCity(User.UserRequest request, StreamObserver<User.UserResponse> responseObserver) {
                            System.out.printf("receive search request ===  name:%s,age:%s\n", request.getName(), request.getAge());
                            User.UserResponse response = User.UserResponse.newBuilder()
                                    .setBirthday(LocalDate.now().toString())
                                    .setCity("beijing").build();
                            responseObserver.onNext(response);
                            responseObserver.onCompleted();
                        }
                    }).build();
            server.start();
            server.awaitTermination();
    }
    
    • client
     public static void main(String[] args) {
            ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8088)
                    .usePlaintext()
                    .build();
    
            UserServiceGrpc.UserServiceBlockingStub stub = UserServiceGrpc.newBlockingStub(channel);
            User.UserRequest request = User.UserRequest.newBuilder()
                    .setName("jay chou")
                    .setAge("30")
                    .build();
    
            User.UserResponse response = stub.searchBirthdayAndCity(request);
            System.out.println(response);
            channel.shutdown();
    }
    

    相关文章

      网友评论

          本文标题:java grpc快速入门

          本文链接:https://www.haomeiwen.com/subject/esgmndtx.html