栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

GRPC简单示例

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的插件:

 说明:

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

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

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

示例中建的是 cal_grpc_service.proto

 内容如下:

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 实体类

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

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示例代码。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/730435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号