开始食用grpc(之一)

   记一次和一锅们压马路,路过一咖啡厅(某巴克),随口就问随行的锅门:你能从那咖啡厅看到什么?

     当时的那家某巴克处于闹市,也正值周末,屋外屋内喝咖啡的人几近乎十分的安静,使用电脑的,刷手机的、做作业的。。。而且大都是年轻人和中年人。

   锅门撂了句:一群屌丝呗 (;¬_¬) 

  。。。白了他一眼(¬_¬)

     ( ...其实想教唆他进去看看美女,歇歇脚来着 ๑乛◡乛๑ )

  .......

     许久之后,也就是最近看到诗人余秀华的一句话后忽有所感,原句是:

    “反正是背负慢慢凋残的孤独,耀眼的孤独,义无反顾的孤独

  这才明白他们是在消费孤独,也为孤独所消费; 他们是,周围的人是,还有 ( ∙̆ .̯ ∙̆ )

  那~ 孤独的结果是什么呢 ?

```

  这次讲下大系统通讯必备的一项组件: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 服务端,我的工程结构大致是这样子的(工程是多模块的):

开始食用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>  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxywx.html