当前位置: 首页>资讯 >

idea构建grpc项目

来源: 博客园 | 时间: 2023-05-21 13:25:31 |

转载请注明出处:

安装protocbuf插件

idea 建议下载一个 protobuf的插件, 可以有代码提示. 这里直接去pluging里搜就行了.

在idea的plugins中搜索proto,然后下载如下的插件就行(最多下载的那个),点击install,然后重启就可以。


(资料图片仅供参考)

gRPC项目构建新建Maven项目并修改pom.xml

首先用IDEA新建一个maven项目

修改pom.xml,注意这个build标签和properties标签都是最顶级标签的直接子标签。

            kr.motd.maven      os-maven-plugin      1.6.2                  org.xolstice.maven.plugins      protobuf-maven-plugin      0.6.1              com.google.protobuf:protoc:3.17.3:exe:${os.detected.classifier}        grpc-java        io.grpc:protoc-gen-grpc-java:1.42.0:exe:${os.detected.classifier}                                          compile            compile-custom                              

接着继续在pom.xml中添加一些,这些依赖是构造gRPC-java项目必须用到的(来自官方文档)

  io.grpc  grpc-netty-shaded  1.42.0  io.grpc  grpc-protobuf  1.42.0  io.grpc  grpc-stub  1.42.0   org.apache.tomcat  annotations-api  6.0.53  provided
添加.proto文件

proto文件用来描述rpc请求体、响应体、以及rpc提供的服务。通过插件可以根据.proto文件生成Java类。

这里面有个非常重要的点要注意,就是proto文件存放的位置。一定要在和src/main/java源文件目录同级的proto源文件目录才可以。如下图所示:

添加一个proto文件:helloworld.proto

syntax = "proto3"; // 协议版本// 选项配置option java_package = "com.chenj.protobuf";option java_outer_classname = "RPCDateServiceApi";option java_multiple_files = true;// 定义包名package com.chenj.protobuf;// 服务接口.定义请求参数和相应结果    service RPCDateService {    rpc getDate (RPCDateRequest) returns (RPCDateResponse) {    }}// 定义请求体message RPCDateRequest {    string userName = 1;}// 定义响应内容message RPCDateResponse {    string serverDate = 1;}
根据.proto文件生成消息体类文件和XXXGrpc类文件

使用maven命令.

在第一步修改的pom.xml的路径下,首先执行

mvn protobuf:compile生成消息体类文件

接着执行:

mvn protobuf:compile-custom生成XXXGrpc类文件

使用maven插件, 编译.

第一个命令执行完. 在 target目录里找就行了. 第二个命令也是找就行了. 然后将生成的Java文件拷贝到你的目录里.就可以了

编写接口实现类
package com.chenj;import com.chenj.grpc.api.RPCDateRequest;import com.chenj.grpc.api.RPCDateResponse;import com.chenj.grpc.api.RPCDateServiceGrpc;import io.grpc.stub.StreamObserver;import java.time.LocalDate;import java.time.format.DateTimeFormatter;// RPCDateServiceGrpc.RPCDateServiceImplBase 这个就是接口.// RPCDateServiceImpl 我们需要继承他的,实现方法回调public class RPCDateServiceImpl extends RPCDateServiceGrpc.RPCDateServiceImplBase {    @Override    public void getDate(RPCDateRequest request, StreamObserver responseObserver) {        //请求结果,我们定义的        RPCDateResponse rpcDateResponse = null;        //        String userName = request.getUserName();        String response = String.format("你好:%s,今天是%s.", userName,LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));        try {            // 定义响应,是一个builder构造器.            rpcDateResponse = RPCDateResponse.newBuilder()                    .setServerDate(response)                    .build();            //int i = 10/0;        } catch (Exception e) {            responseObserver.onError(e);        } finally {                        responseObserver.onNext(rpcDateResponse);        }        responseObserver.onCompleted();    }}
定义服务端
package com.chenj;import io.grpc.Server;import io.grpc.ServerBuilder;import java.io.IOException;public class GRPCServer {    private static final int port = 9999;    public static void main(String[] args) throws IOException, InterruptedException {        //设置service端口        Server server = ServerBuilder.forPort(port)                .addService(new RPCDateServiceImpl())                .build().start();        System.out.println(String.format("GRpc服务端启动成功, 端口号: %d.", port));        server.awaitTermination();    }}
定义客户端
package com.chenj;import com.chenj.grpc.api.RPCDateRequest;import com.chenj.grpc.api.RPCDateResponse;import com.chenj.grpc.api.RPCDateServiceGrpc;import io.grpc.ManagedChannel;import io.grpc.ManagedChannelBuilder;public class GRPCClient {    private static final String host = "localhost";    private static final int serverPort = 9999;    public static void main(String[] args) {        //1,拿到一个通信channel        ManagedChannel channel = ManagedChannelBuilder.forAddress(host, serverPort).                usePlaintext()//无需加密或认证                .build();        try {            //2.拿到stub对象            RPCDateServiceGrpc.RPCDateServiceBlockingStub rpcDateService  = RPCDateServiceGrpc.newBlockingStub(channel);            RPCDateRequest rpcDateRequest = RPCDateRequest.newBuilder()                    .setUserName("JACK")                    .build();            //3,请求            RPCDateResponse rpcDateResponse = rpcDateService.getDate(rpcDateRequest);            //4,输出结果            System.out.println(rpcDateResponse.getServerDate());        } finally {            // 5.关闭channel, 释放资源.            channel.shutdown();        }    }}

然后先启动Server:  再启动Client:  可以看到执行成功。一个简单的gRPC helloworld工程就搭建好了。

关键词:

 

热文推荐

idea构建grpc项目

转载请注明出处:安装protocbuf插件idea建议下载一个protobuf的插件,可以有代码提示 这里直接去pluging里搜

2023-05-21

每日速讯:浅夏悠悠|风中的香气捎来了初夏的花信,收下这篇初夏赏花指南!

风中的香气捎来了初夏的花信。目前,市属公园、国家植物园(北园)、中国园林博物馆处处花意盎然,芍药、月

2023-05-21

天天热资讯!安徽合肥“智造”:每0.5秒就可下线一台笔记本电脑

5月18日,记者跟随2023“中国式现代化长三角实践”网络主题活动,走进位于安徽省合肥经开区的联想集团合肥

2023-05-21

全日制和开放教育区别 开放教育和函授的区别

今天来聊聊关于全日制和开放教育区别,开放教育和函授的区别的文章,现在就为大家来简单介绍下全日制和开放

2023-05-21

【环球热闻】OPPO手机怎么连接电脑投屏 oppo手机怎么连接电脑

今天来聊聊关于OPPO手机怎么连接电脑投屏,oppo手机怎么连接电脑的文章,现在就为大家来简单介绍下OPPO手机

2023-05-21

全球热资讯!世青赛首轮阿根廷2-1乌兹别克斯坦,国米小将卡博尼攻入制胜球

U20世界杯在阿根廷拉开帷幕,东道主阿根廷青年队在首场比赛中2比1击败乌兹别克斯坦青年队。阿根廷与新西兰

2023-05-21

环球今日报丨西甲前瞻:争冠无望皇马心态成迷 坐镇主场瓦伦力争逆袭

北京时间5月22日凌晨0:30,西甲第35轮继续进行,刚刚在欧冠当中惨败出局的皇马,将来到客场迎战瓦伦西亚。

2023-05-21

天天微动态丨探世界智能大会:未来科技感包裹无限创意扑面而来

探世界智能大会:未来科技感包裹无限创意扑面而来---题探世界智能大会未来科技感包裹无限创意扑面而来。现

2023-05-21

今日视点:宁波市常青藤物业管理有限公司

1、宁波市常青藤物业管理有限公司于1997年05月04日在宁波市市场监督管理局登记成立。2、法定代表人邱伟明,

2023-05-21

全球关注:二五八万一样什么意思 二五八万

今天来聊聊关于二五八万一样什么意思,二五八万的文章,现在就为大家来简单介绍下二五八万一样什么意思,二

2023-05-20

“520”和书香撞个满怀,鲁迅书店里共话魏晋风骨_每日热讯

5月20日下午,在位于西城区的鲁迅书店内,一场关于“魏晋风骨”的读书分享活动吸引了几十位青年。他以“东

2023-05-20

蓝芙蓉王多少钱一条|每日速讯

1、虽然芙蓉王香烟品牌下,系列品种众多,但蓝色芙蓉王绝对是烟民最常见的选择。2、尤其是07年所推出的蔚蓝

2023-05-20

【天天新视野】一枝16元?!这里一天狂卖超850万枝!你买了吗

在被誉为“亚洲花都”的云南斗南花卉市场,各色鲜花争奇斗艳,价格也全线上涨

2023-05-20

女孩犯错挨打有用吗_女孩犯错挨打

1、老师打人是不对的关键是老师只是想吓唬吓唬女孩子吧其实这种方法并不好这个老师也没什么本事只能威胁学

2023-05-20

【世界快播报】26岁生日快乐!布莱顿官方为三笘薫送上生日祝福

直播吧5月20日讯今天是日本球员三笘薫26岁的生日,布莱顿官方为三笘薫送上了生日祝福,他们在推特上写道:

2023-05-20

我也喜欢《大唐双龙传》,这是黄易先生作品中唯一喜欢的,别的都不太读得下去

我也喜欢《大唐双龙传》,这是黄易先生作品中唯一喜欢的,别的都不太读得下去,黄先生写得好是因为他真懂点

2023-05-20

富士X-S20相机谍照曝光:5月24日发布,售价1299美元

IT之家5月19日消息,富士将在5月24日举行发布会,预计会发布包括X-S20相机在内的多款新品,据Fujirumors消

2023-05-20

《复联4》再发预告片!漫威粉集体落泪,内地粉丝看到档期怒了

钢铁侠虽然没有公布,但是外界也都在纷纷猜测,这也是最后一部的漫威电影。而且,在《复联3》中,大家也可

2023-05-20

汇报能力,才是你的职场必杀技-热讯

好的汇报,是聪明的职场人 "事业跃升的阶梯、斩获人脉资源的钥匙 "。但很遗憾,很多朋友在做汇报的时候,采

2023-05-20

诗经风雅颂含义 诗经风雅颂分别指什么

今天来聊聊关于诗经风雅颂含义,诗经风雅颂分别指什么的文章,现在就为大家来简单介绍下诗经风雅颂含义,诗

2023-05-20