GRPC简单示例

使用 proto + maven 的 proto 插件

1. pom.xml

添加依赖:

        
           1.8
           1.24.0
        

        
            io.grpc
            grpc-netty
            ${grpc.version}
        
        
            io.grpc
            grpc-protobuf
            ${grpc.version}
        
        
            io.grpc
            grpc-stub
            ${grpc.version}
        
        
        
            com.google.protobuf
            protobuf-java
            3.8.0
        

添加 protobuf-maven 插件:

            
                org.xolstice.maven.plugins
                protobuf-maven-plugin
                0.5.0
                
                    com.google.protobuf:protoc:3.8.0:exe:windows-x86_64
                    grpc-java
                    io.grpc:protoc-gen-grpc-java:1.14.0:exe:windows-x86_64
                
                
                    
                        
                            compile
                            compile-custom
                        
                    
                
            

再 idea 的 maven 视图窗口 可以看到 protobuf的插件:

GRPC简单示例_第1张图片

 说明:

使用  protobuf:compile 完成  message  的 代码生成,使用 protobuf:compile-custom完成 service的代码生成

依赖 、插件 添加完之后,可以 写 proto文件了:

2. proto 文件, 再 main 文件夹下 新建 proto文件夹,并新建 .proto文件

示例中建的是 cal_grpc_service.proto

GRPC简单示例_第2张图片

 内容如下:


syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.wxj.grpctest.auto";

message RequestWxj {
  string name = 1;
}


message ResponseWxj {
  string message = 1;
}

service WxjHelloService {

  rpc sayHello (RequestWxj) returns (ResponseWxj) {
  }
}

3. 再 maven 视图的 protobuf插件,执行 protobuf:compile、protobuf:compile-custom, 会再 target文件夹下 生成相应的 Java代码

grpc-java 文件夹里是 service服务

java文件夹里是 message 实体类

GRPC简单示例_第3张图片

4. 把生成的 Java文件 copy到 工程里,然后把 target 文件夹删除,maven的 protobuf插件注释掉,防止重复生成Java文件。

GRPC简单示例_第4张图片

5. 再生成的 service 类中,有一个 抽象的内部类 需要 我们自己实现


public class HelloService extends WxjHelloServiceGrpc.WxjHelloServiceImplBase {

    @Override
    public void sayHello(RequestWxj request, StreamObserver responseObserver) {
        // 第一个 参数 就是 客户端 请求时传入的
        System.out.println("接收到请求:" + request.getName()); ;

        // 设置 响应数据
        ResponseWxj res = ResponseWxj.newBuilder().setMessage("收到请求了,放心吧!").build();

        responseObserver.onNext(res);
        responseObserver.onCompleted();

        System.out.println("业务处理结束。");
    }
}

6. 启动服务

@Service
public class ServiceStart {

    @PostConstruct
    public void init() throws Exception{

        Server server = ServerBuilder.forPort(8090).addService(new HelloService()).build();
        server.start();
        System.out.println("grpc server start");
    }
}

7 客户端代码

首先,客户端代码,也需要使用到 .proto 文件中定义的 message 和 service, 把 生成的Java代码 copy到 客户端项目中即可。

然后,再编写 客户端代码:


public class GrpcClient {
    public static void main(String[] args) {

        // 建立grpc连接
        ManagedChannel channel = ManagedChannelBuilder
                .forAddress("localhost", 8090)
                .usePlaintext()
                .build();

        // 创建 客户端代理
        WxjHelloServiceGrpc.WxjHelloServiceBlockingStub stub = WxjHelloServiceGrpc.newBlockingStub(channel);

        // 创建 请求对象
        RequestWxj req = RequestWxj.newBuilder().setName("0101").build();

        // 发起 grpc 调用
        ResponseWxj res = stub.sayHello(req);

        System.out.println("client 收到了回复:" + res.getMessage());

        // 关闭连接
        channel.shutdownNow();
    }
}

这样代码都写完了,可以启动服务测试:

服务端:

GRPC简单示例_第5张图片

客户端:

GRPC简单示例_第6张图片

 以上就是 简单的 grpc示例代码。

你可能感兴趣的:(笔记,java)