- 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);
List newsList = 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



