GRPC的JAVA使用介绍

1.创建maven项目并且添加依赖

将下面的依赖添加到pom文件中,GRPC一共依赖四个jar包。

        
            io.grpc
            grpc-netty-shaded
            1.24.0
        
        
            io.grpc
            grpc-protobuf
            1.24.0
        
        
            io.grpc
            grpc-stub
            1.24.0
        
                
            com.google.protobuf
            protobuf-java
            3.8.0
        
        #以及build
        
        	
				
                org.xolstice.maven.plugins
                protobuf-maven-plugin
                0.6.1
                
                    com.google.protobuf:protoc:3.10.0:exe:${os.detected.classifier}
                    grpc-java
                    io.grpc:protoc-gen-grpc-java:1.24.0:exe:${os.detected.classifier}
                
                
                    
                        
                            compile
                            compile-custom
                        
                    
                
            
        
        
            
                kr.motd.maven
                os-maven-plugin
                1.6.2
            
        
		

2. 创建proto文件,并且生成对应的java文件GRPC的JAVA使用介绍_第1张图片

创建对应的proto目录,并且生成user.proto文件

syntax = "proto3";

option java_package = "com.jiangpeipei.net.grpc";

service user {
    rpc login (LoginRequest) returns (APIResponse);
    rpc logout (Empty) returns (APIResponse);
}

message LoginRequest {
    string username = 1;
    string password = 2;
}

message APIResponse {
    string message = 1;
    int32 code = 2;
}
message Empty {
}

代码完成后执行,mvn clean compile 执行成功后会在

target/generaten-sources/protobuf/grpc-java 和 target/generaten-sources/protobuf/java 目录下生成对应的java文件

3. 创建一个GRPC的服务

/**
 * 接受请求 -> 处理 ->返回响应
 */
public class User extends userGrpc.userImplBase {


    @Override
    public void login(LoginRequest request, StreamObserver responseObserver) {
        //获取请求中的参数
        String username = request.getUsername();
        String password = request.getPassword();
        APIResponse.Builder builder = APIResponse.newBuilder();

        //简单地逻辑处理
        if (username.equals(password)) {
            builder.setCode(200);
            builder.setMessage("SUCCESS");
        } else {
            builder.setCode(500);
            builder.setMessage("LOGIN FAIL");
        }
        //响应信息
        responseObserver.onNext(builder.build());
        //完成后关闭通讯
        responseObserver.onCompleted();
    }

    @Override
    public void logout(Empty request, StreamObserver responseObserver) {


    }

}

4. 启动GRPC服务

public class GRPCServer {
    
    public static void main(String[] args) throws IOException, InterruptedException {

        Server server = ServerBuilder.forPort(9090).addService(new User()).build();
        
        server.start();
        
        server.awaitTermination();
    }
}

5. 创建一个client 与GRPC通讯

public class GRPCClient {

    public static void main(String[] args) {
        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 9090).usePlaintext().build();

        // stubs - generate from proto
        //阻塞
        userGrpc.userBlockingStub stub = userGrpc.newBlockingStub(channel);
        User.LoginRequest loginRequest = User.LoginRequest.newBuilder().setPassword("jpp").setUsername("jpp").build();

        //异步
//        userGrpc.newFutureStub();
        //异步
//        userGrpc.newStub();

        User.APIResponse apiResponse = stub.login(loginRequest);

        System.out.println(apiResponse.getMessage());
    }
}

6. 测试

a. 启动server端
b. 启动client端,打印SUCCESS 表示测试成功

7. 注意事项

如果有引用guava,版本升级到23.0版本以上

你可能感兴趣的:(GRPC的JAVA使用介绍)