Advertisement

protoc生成java grpc客户端代码

阅读量:

开发中需要用java程序调用一个golang程序的grpc接口。需要使用原始proto文件生成java的模板代码。

网上教程大多数给的是这段代码:

复制代码
    protoc -I=. --java_out=out engine.proto

这个代码生成的内容里,只会有proto的序列化和反序列化代码。不会有调用服务所用的newBlockingStub(chan);代码段,因此我们无法调用外部服务。(即只会翻译message段,不会翻译service段)

解决方案

首先,从https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.31.1/下载一个protoc的java插件。

下载完成后要把该程序加入到$PATH中,比如/user/local/bin,然后在--plugin=后添加你的程序路径

使用这段代码,添加一个java的plugin:

复制代码
    protoc --plugin=protoc-gen-grpc-java engine.proto --java_out=out --grpc-java_out=out

使用java插件后,就会生成两个.java文件,一个是对应message的,一个是对应service

附件

下面附一段java调用grpc远程接口的示例:

复制代码
        Engine.SgcPbRequest.Builder bder = Engine.SgcPbRequest.newBuilder();
        bder.setRequest("hello");
        Engine.SgcPbRequest req = bder.build();
    
        ManagedChannel chan = ManagedChannelBuilder.forAddress("127.0.0.1", 6666).usePlaintext().build();
        SenseGoEngineServiceGrpc.SenseGoEngineServiceBlockingStub stub = SenseGoEngineServiceGrpc.newBlockingStub(chan);
        Engine.SgcPbKeyResult resp = stub.senseGoEngineGetKey(req);
        System.out.println(resp.getKey().getAesKey());

全部评论 (0)

还没有任何评论哟~