java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)

93b9cab3a019b312029f26db19bf0f7d.png

在此篇中我们将简要介绍关于grpc对java客户端的实现。

在开始开发前,我们需要先导入

 io.grpc grpc-netty 1.11.0io.grpc grpc-protobuf 1.11.0io.grpc grpc-stub 1.11.0

如果是Android除了这几个包外,你可能还需要一个javax.annotation:javax.annotation-api:1.2包,这个大家可以自行百度。

当然你如果想自己编译proto文件,你还需要引用一些插件,具体你可以看:

https://github.com/grpc/grpc-java

完成包的导入后我们就可以正式开始开发了,首先需要导入proto的生成文件。

根据上篇中,大约有3个文件,在这里再说明一次,多文件必须把引用的文件一同编译。否则你将不会生成outerclass那个文件,导致报错。这点一定要注意。

接下来我们就可以编码了,在java端grpc存在3种stub,包括stub,blockingstub,和futurestub。

其中futurestub只支持普通的grpc服务,不支持流的形式。

blockingstub支持普通的和服务端流。

stub支持所有的形式。

先让我们看一下普通形式请求和服务端流形式请求。

 int port = 50052; String urlPath = "192.168.2.223"; Channel channel; //设置grpc链接 channel = NettyChannelBuilder.forAddress(urlPath, port).negotiationType(NegotiationType.PLAINTEXT).build(); UserServerGrpc.UserServerBlockingStub userServerBlockingStub = UserServerGrpc.newBlockingStub(channel); UserVo.User user = UserVo.User.newBuilder().setUserId("1").build(); //根据条件获得用户 UserVo.User u = userServerBlockingStub.getUserById(user); System.out.println(u); System.out.println("=================================="); //获得用户列表 UserVo.Empty empty = UserVo.Empty.newBuilder().build(); UserVo.UserList userList = userServerBlockingStub.getList(empty); for(int i=0;i userIterator = userServerBlockingStub.getListStream(empty); while (userIterator.hasNext()){ System.out.println(userIterator.next().toString()); }

这两种比较简单,只需要我们建立一个stub,然后调用对应的方法填入数据即可。

对于客户端流和双向流是一样的,我们首先需要实现一个StreamObserver的接口,在onnext方法中拿到返回数据。在onCompleted中判断是否完成。

 final StreamObserver streamObserver = new StreamObserver() { @Override public void onNext(UserVo.UserList userList) { //拿到服务端返回值 } @Override public void onError(Throwable throwable) { } @Override public void onCompleted() { //完成 } }; UserVo.User U1 = UserVo.User.newBuilder().setUserId("3").setUserName("小刘").setAge(10).build(); UserVo.User U2 = UserVo.User.newBuilder().setUserId("4").setUserName("小红").setAge(23).build(); UserVo.UserList userList1 = UserVo.UserList.newBuilder().setU(1,U1).setU(2,U2).build(); UserServerGrpc.UserServerStub userServerBlockingStub1 = UserServerGrpc.newStub(channel); final StreamObserver streamObserver1 = userServerBlockingStub1.setUserStream(streamObserver); //发送数据 streamObserver1.onNext(U1); streamObserver1.onNext(U2); //发送完成 streamObserver1.onCompleted();

到此,grpc的4种形式基本就算是结束,grpc在调用上比较简单,主要是在proto的编译上。如果编译正确基本使用还是比较简单的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net 文本框显示xml格式数据_Excel 办公小技巧,查找和替换数据,您值得拥有...

在数据处理的过程中,有时需要在工作表中查找一些数据,以便查看或修改数据。若工作表的数据能一目了然,则可手动进行查找,但在记录繁多的工作表中查找所需数据并替换,效率比较低,而且极易出现遗漏。这时就可…

微软认知服务应用秘籍 – 与机器人聊知识

在本篇博客中,我们将会学习到零代码情况下,如何利用已有的技术建立自己的知识问答系统,这种系统的可以广泛适用于学校、企业、客服、政府公开信息等领域,代替传统的电话咨询、电子邮件沟通等高人工负荷的方式。 建立知识库 什么…

.net 开发怎么实现前后端分离_ASP.NET Core模块化前后端分离快速开发框架介绍

源码地址GitHub:https://github.com/iamoldli/NetModular演示地址地址:http://118.24.75.170:6220/账户:admin密码:admin前端框架演示地址(临时)地址:http://progqx5cu.bkt.clouddn.com/skins/index.html#/账户&#x…

微软认知服务应用秘籍 – 支持跨平台客户端的视觉服务中间层

不断演进的应用场景 初级应用场景—宅在家里 场景:Bob同学有一天在网上看到了一张建筑物的图片,大发感慨:"好漂亮啊!这是哪里?我要去亲眼看看!"Bob同学不想问别人,可笑的自尊心让他…

就业技术书文件表格_429页标准指南,教你如何管理工程监理文件资料,丰富图表一看就会...

房屋建筑工程监理文件资料的管理,参差不齐,也给监理工作带来了很大障碍。这份房建工程监理文件资料管理标准指南,能够帮助广大监理和资料员们实现监理文件资料标准化管理,能够有效地补充和支撑现场监理工作,对于工程资…

微软认知服务应用秘籍 – 君子动口不动手

概述 科技的不断发展带动着人们生活质量不断的提升,其中一方面就体现在日常家庭生活中,智能设备层出不穷,给人们的生活带来了很大的便利。 以电视为例,几十年前的电视还是按钮式的,每次换台还要跑到电视跟前&#xf…

AI应用开发实战 - 手写算式计算器

扩展手写数字识别应用 识别并计算简单手写数学表达式 主要知识点 了解MNIST数据集了解如何扩展数据集实现手写算式计算器 简介 本文将介绍一例支持识别手写数学表达式并对其进行计算的人工智能应用的开发案例。本文的应用是基于前文“手写识别应用入门”中的基础应用进行扩…

sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言本文主要讲解Linux系统中的sed命令的作用与使用案例。sed用于查找、过滤、文本替换、替换和插入、删除等文本操作。它是Linux/Un…

现代软件工程 期中/期末总结博客作业

(软件工程作业列表) 经历了一个学期的学习, 可以把经历和收获总结一下。 第一部分 耕耘 请说明你付出了多少时间,写了多少代码,多少注释,多少文档(博客),多少次签入,最好用折线图或其他合适的图形化的方式…

caj转pdf python_PDF怎么转换成Word?2种方法3秒一键转换!建议收藏

Hello,大家好!今天给大家带来:PDF一键转Word的干货!保证全方位满足你工作和学习的需求~01Word转换法适用:纯文字简单型PDF文件。其实对于简单纯文字的PDF文件,直接使用Word就能转换,操作也非常简…

AI应用开发基础傻瓜书系列1-神经网络的基本工作原理

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…

动力环境监控系统论文_浅谈动力环境监控系统技术标准

动力环境监控系统技术标准规定了监控系统各因素指标、功能,对实现机房设备故障自动检测、无人化值守、降低维护保养成本的动环系统有重要的作用和意义。运用动环监控,能解决成本高、效率低、告警慢、信息落后能问题。一、动环监控系统的技术标准1、可靠性…

cmd python封装成exe_别再问我怎么Python打包成exe了!

也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇(如果有)。再不行,让代码替我们干着重复的工作,我们有节省出来的时间打游戏不好嘛,是…

监听router_深入揭秘前端路由本质,手写 mini-router

前言前端路由一直是一个很经典的话题,不管是日常的使用还是面试中都会经常遇到。本文通过实现一个简单版的 react-router 来一起揭开路由的神秘面纱。通过本文,你可以学习到:前端路由本质上是什么。前端路由里的一些坑和注意点。hash 路由和 …

AI应用开发基础傻瓜书系列附录-基本数学导数公式

基本函数导数公式 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.…

5gh掌上云计算认证不通过_阿里云ACP认证考试攻略、考试心得、费用及常见问题...

阿里云ACP级认证是阿里云的专业工程师认证,云吞铺子分享ACP认证考试攻略、考试心得、考试费用及常见问题:ACP认证分类ACP认证根据所属领域不同分为五类,即即云计算、大数据、大数据分析师、云安全、企业互联网架构,考试方向不同考…

AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念

AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理0…

verilog异步复位jk触发器_Verilog专题(九)DFF、Dlatch、JK flipflop

DFF、Dlatch、JK flip-flop对于verilog的学习,这里推荐一个比较好的实践网站HDLBits:https://hdlbits.01xz.net/wiki/Main_Page本系列记录一些我觉得有价值的题目,希望通过这些题目可以对verilog更加熟练。D flip-flops D触发器根据复位的…

AI应用开发基础傻瓜书系列3-激活函数和损失函数

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…

中两个数做减法_人生下半场,学会做减法

作者:洞见余生人生如逆旅,你我皆行人。梭罗在瓦尔登湖中写道:“一个人,只要满足了基本生活所需,不再汲汲于声名,不再汲汲于富贵,便可以更从容,更充实地享受人生。”曾经觉得&#xf…