使用 proto + maven 的 proto 插件
1、pom.xml
添加依赖:
添加 protobuf-maven 插件:
再 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
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示例代码。