欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

GRPC简单示例

时间:2023-07-08

使用 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、启动服务

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。