- proto文件
- 客户端pom依赖
- 客户端代码编写
紧接上一篇grpc之Java实战服务端篇,已经大致说清楚了grpc的服务端是怎么去实现的,这一篇我们就检点说一说客户端的实现.
proto文件这里需要注意的是客户端与服务端的proto文件必须是相同的,其实这个不难理解,就相当于彼此间的一个通行标记,只有互相能够识别的时候才能够通,所以第一步就是将proto文件复制过来.
客户端pom依赖客户端的pom依赖跟服务端的是一样的,同样是引用这些基本的grpc和protobuf就可以了:
客户端代码编写1.29.0 3.11.0 io.grpc grpc-netty-shaded${grpc.version} io.grpc grpc-protobuf${grpc.version} io.grpc grpc-stub${grpc.version} org.apache.tomcat annotations-api6.0.53 provided kr.motd.maven os-maven-plugin1.5.0.Final org.xolstice.maven.plugins protobuf-maven-plugin0.5.1 com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} grpc-java io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} proto compile compile-custom
相较于服务端,客户端的实现要简单许多,只需要新建一个启动方法就可以了,我把目录结构截图:
我将客户端的代码大致分为一下几个步骤:
- 定义好IP和端口
- 创建一个通讯管道,通过构造器传入定义的服务IP和端口
- 通过使用构造器模式给参数赋值
- 调用服务
- 关闭服务
代码如下
package com.xj.news; import com.xj.news.proto.HelloProto; import com.xj.news.proto.NewsServiceGrpc; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import java.util.List; public class NewClient { private static final String host = "localhost";//服务器 private static final int serverPort = 8888;//服务端口号 public static void main(String[] args) { //创建一个通讯管道channel,构造器传入定义的服务IP和端口,usePlaintext()表示一个传输文本的通道 ManagedChannel channel = ManagedChannelBuilder.forAddress(host,serverPort) .usePlaintext().build(); try { NewsServiceGrpc.NewsServiceBlockingStub blockingStub = NewsServiceGrpc.newBlockingStub(channel); HelloProto.NewsRequest request = HelloProto.NewsRequest.newBuilder().setDate("20220102").build(); HelloProto.NewsResponse response = blockingStub.list(request); ListnewsList = response.getNewsList(); for (HelloProto.News news:newsList ) { System.out.println(news.getTitle()+":"+news.getContent()); } }finally { channel.shutdown(); } } }
一个简单的grpc例子到这已经完全结束,因为git的改动,只能是一个私有项目,现在把他转存到我的百度网盘,供需要的朋友下载
链接:https://pan.baidu.com/s/1jy5fAQy81nGp0-YYvws8sw
提取码:1111