记一次和一锅们压马路,路过一咖啡厅(某巴克),随口就问随行的锅门:你能从那咖啡厅看到什么?
当时的那家某巴克处于闹市,也正值周末,屋外屋内喝咖啡的人几近乎十分的安静,使用电脑的,刷手机的、做作业的。。。而且大都是年轻人和中年人。
锅门撂了句:一群屌丝呗 (;¬_¬)
。。。白了他一眼(¬_¬)
( ...其实想教唆他进去看看美女,歇歇脚来着 ๑乛◡乛๑ )
.......
许久之后,也就是最近看到诗人余秀华的一句话后忽有所感,原句是:
“反正是背负慢慢凋残的孤独,耀眼的孤独,义无反顾的孤独”
这才明白他们是在消费孤独,也为孤独所消费; 他们是,周围的人是,还有 ( ∙̆ .̯ ∙̆ )
那~ 孤独的结果是什么呢 ?
```
这次讲下大系统通讯必备的一项组件:rpc,rpc有很多 如 dubbo、thirft、feign、motan、grpc 等~,这其中有字符串方式的也有二进制流方式的;整体来说二进制方式的一般会较字符串方式的快许多,字符形式的的慢,但是简单;而二进制方式的 序列化和跨平台较为麻烦些;我个人选取rpc时一般综合考虑一下几点:
A>传输方式是否是二进制
B>是否长期支持
C>是否支持跨平台,开源组件是否丰富
C+>是否支持异步调用
D>有无明显的bug或缺点
E>维护和开发是否有好
综合下来,个人坚定之选择grpc,这个初出茅庐(2015年发布)的东东,十分强大:
>> http2流方式
>> 自带异步特性
>> 跨平台(支持11种语言)
>> 无需zookeeper这类单独的服务中心
>> 对开发人员比较友好
>> 服务调用方可设置请求头
当然缺点也是存在的:需要单独写proto文件(生成目标语言的一套语法定义)、变量为null时会赋予默认初始值、链式调用(还好调用接口较为单一,只是语法较为怪异)...
如果您在意以上缺点,可绕过本文哈~
ok,现在开始我开始讲grpc,内容大致有四:
A->grpc的简单配置 (本节)
A>简单grpc编写 (本节)
B>复杂grpc proto服务文件编写 (本节)
C>双向流式调用方法及注意事项 (之二)
D>grpc安全问题及拦截器 (之二)
grpc的配置:
这里我的工程是基于springboot,同时为简化开发起见,我使用 ,开始之前先感谢这位开发者为简化grpc的java平台简化了太多的开发,同时也为springcloud融合做了太多共享,非常感谢~!
这里,首先得准备三个springboot模块,这三个模块包含:grpc proto3文件生成模块、grpc 客户端、grpc 服务端,我的工程结构大致是这样子的(工程是多模块的):
这里面的三个模块一看就懂,就不细讲啦~,准备好这三个模块后,依次配置依赖包及参数:
服务端(preview-grpc-server):
pom.xml中依赖包配置>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>net.devh</groupId>
<artifactId>grpc-client-spring-boot-autoconfigure</artifactId>
<version>RELEASE</version>
</dependency>
<!-- 由于我的工程是多模块的,若不作为jar包引入,也可以将preview-grpc-lib中的java文件拷贝到当前工程内也可 -->
<dependency>
<groupId>com.github.carvechris</groupId>
<artifactId>preview-grpc-lib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>