grpc - 使用
grpc 工具
BloomRPC
GRPC - 使用
protobuf
定义protobuf,并将protobuf文件,通过java的plugin打包生成java-grpc相关文件。参照:grpc-protobuf
mvn依赖
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.21.7</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.30.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.30.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.30.0</version>
</dependency>
grpc-server:
// Configuration 定义
@Bean
public GrpcServer grpcServer(@Value("${gprc.port}") Integer grpcPort)){
GrpcServer grpc = new GrpcServer(grpcPort);
grpc.init();
}
/**
* Grpc interface
*/
public class TestGrpcServer extends TestServiceGrpc.TestServiceImplBase{
@Override
public void searchUser(TestInfo request, StreamObserver<TestResult> responseObserver) {
TestResult result = TestResult.newBuilder().setCode("123").setMsg("testOK").build();
log.info(String.valueOf(request));
responseObserver.onNext(result);
responseObserver.onCompleted();
}
}
/**
* grpc server
*/
public class GrpcServer {
private int grpcPort;
public GrpcServer(Integer grpcPort){
this.grpcPort = grpcPort;
init();
}
public void init() throws Exception {
ServerBuilder.forPort(grpcPort)
.addService(new TestGrpcServer())
.build()
.start();
}
}
grpc-client:
@Bean
public GrpcClient grpcClient(@Value("${grpc.ip}") String grpcIp, @Value("${grpc.port}")Integer grpcPort){
return new GrpcClient(grpcIp, grpcPort);
}
public class GrpcClient {
private Channel channel = null;
public GrpcClient(String grpcIp, Integer grpcPort){
this.grpcIp = grpcIp;
this.grpcPort = grpcPort;
channel = channel();
}
public TestResult run(TestInfo testInfo) {
TestServiceGrpc.TestBlockingStub serviceStub = TestServiceGrpc.newBlockingStub(channel);
TestResult testResult = serviceStub.searchUser(testInfo);
return testResult;
}
/**
* Channel
* @return
*/
private Channel channel() {
return ManagedChannelBuilder.forAddress(grpcIp,grpcPort).usePlaintext().build();
}
}
Test试用
@RestController
@RequestMapping("/grpc")
public class TestGrpcController {
@Autowired
GrpcClient grpcClient;
@RequestMapping("/test")
public String grpcTest(){
TestInfo testInfo = TestInfo.newBuilder().setCode("AAAA").build();
TestResult testResult = grpcClient.run(testInfo);
String json = null;
try {
json = JsonFormat.printer().print(testResult);
//JsonFormat.parser().merge(json, TestInfo.newBuilder());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
return json;
}
异常
1. io.grpc.netty.shaded.io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record:
因client端采用TLS访问,而服务端默认是PlainText返回信息。
2. Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.google.protobuf.UnknownFieldSet$Parser]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.google.protobuf.UnknownFieldSet$Parser and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.yumchina.share.app.auth.hub.test.proto.AuthResult["unknownFields"]->com.google.protobuf.UnknownFieldSet["parserForType"])
因grpc产生的对象,不具备set方法,因此无法直接jackson序列化返回。需要引入protobuf-java-util工具类。
3. 指定method没有找到
因client端和server端使用的package路径不一致导致,要定义统一的protobuf的package。
4.NettyChannelProvider class is not found
多个使用的grpc的jar包冲突导致,如果无法排除对方的NettyChannelProvider,则直接改用最基本的grpc-netty的maven依赖jar。
即:grpc-netty-shaded -》 grpc-netty。 因grpc-netty下NettyChannelProvider在io.grpc.netty下,具有最priority。
grpc - 使用的更多相关文章
- gRPC源码分析1-SSL/TLS
引子 前几天看到微信后台团队分享了TLS相关文章,正好gRPC里TLS数据加密是很重要的一块,于是整理出了这篇文章. 在gRPC里,如果仅仅是用来做后端微服务,可以考虑不加密.本文太长,先给个大纲. ...
- gRPC源码分析2-Server的建立
gRPC中,Server.Client共享的Class不是很多,所以我们可以单独的分别讲解Server和Client的源码. 通过第一篇,我们知道对于gRPC来说,建立Server是非常简单的,还记得 ...
- gRPC源码分析0-导读
gRPC是Google开源的新一代RPC框架,官网是http://www.grpc.io.正式发布于2016年8月,技术栈非常的新,基于HTTP/2,netty4.1,proto3.虽然目前在工程化方 ...
- 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开 ...
- gRPC .NET Core跨平台学习
前些天发布gRPC C# 学习,在.NET Framework 中使用gRPC ,今天来学习 .NET Core gRPC. gRPC 的.NET Core 包在NuGet 上发布了,结合.NET C ...
- gRPC C#学习
前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...
- .net core 用grpc实现微服务
GRPC 是Google发布的一个开源.高性能.通用RPC(Remote Procedure Call)框架.提供跨语言.跨平台支持.以下以.NET Core 使用控制台.docker中演示如何使用G ...
- rpc框架之gRPC 学习 - hello world
grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...
- Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》
Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...
- gRPC+etcd的优势分析
相比webService等可跨平台,跨语言的服务相比,gRPC更增加了以下优势 1.可以采用二进制传输,速度更快 (使用TCP传输层,而不是Http2应用层) 2.集群服务,统一注册,可靠性高( 好的 ...
随机推荐
- echarts的label的formatter 自动换行
1.加 \n 2.使用extraCssText
- 钉钉机器人webhook的使用
1.群启动webhook机器人:右上角设置--智能助手---添加机器人---其他机器人 2.获取webhook地址 3.调用方式不一样,则访问方式就不一样 ---------------------- ...
- jquery语言中获取input标签后如何给input标签添加disabled的属性
jquery语言中获取input标签后如何给input标签添加disabled的属性 1.使用JQuery函数prop():$("input").prop("disabl ...
- HCIA-ICT实战基础12-网络设备安全特性
HCIA-ICT实战基础-网络设备安全特性 目录 常见设备安全加固策略 网络设备安全加固部署示例 本机防攻击配置 1 常见设备安全加固策略 1.1 为什么需要网络设备安全 网络安全是一个系统工程, 网 ...
- 天龙八部<三联版>三
虚竹经历这么多事情,只想回少林寺,在面馆遇到出来玩的阿紫被阿紫调戏而破了荤戒.随后丁春秋到来,抓到阿紫,恰好慕容复也来到面馆,二人相斗,阿紫在打斗过程中被丁春秋刺瞎双眼,但却被游坦之救走, 最后慕容复 ...
- axios基本配置
点击查看代码 <!-- axios基础用法 --> <script> /** * axios:一款基于promise设计模式封装的ajax库(JQ中的ajax就是最普通的aja ...
- 项目实训 DAY17-18
第一天,与后端的同学交接,先跟他说了怎么安装依赖库,弄完后他那边运行有些问题. 第二天,后端的同学说可以运行但无法部署,我思考后一起商量着只做静态模型(本身不同的两张图片只有input有区别),然后添 ...
- windows 10 的VMware workstation Pro突然变成英文界面
电脑的VMware虚拟机界面是中文版的,后来在捣弄些电脑配置,突然变成英文版界面了. 后面发现原来是区域格式选错了:正确的格式是下图红框
- #科技 #资讯 #生活 RTX 4080显卡在欧跌破建议零售价, 小鹏回应自研电池, Meta因泄漏超5亿用户资料被罚款 ,黑猫投诉开启2022“你我同心 反诈同行”系列活动,这就是今天的其它大新闻
今天是2022年11月29日 十一月初六 现在是下午15:29 下面是今天的其他大新闻 #NEWS 1 #RTX 4080在欧跌破建议零售价 ( IT 之家 )据 PCGamesHardware 报道 ...
- tomcat任务部署
tomcat项目部署 主机 IP 需求 web-1 192.168.78.144 tomcat+jenkins web-2 192.168.78.145 tomcat 在RHEL-1主机上部署的jen ...