ScalaPB 实战 quickStart 【scala grpc】 1

作为 一款 面向对象函数式编程的语言 ,scala 如此优秀,可是在RPC框架中,竟然被Thrift && protobuf &&GRPC所遗忘,也有可能是scala的门槛实在是太高,导致这些rpc框架选择放弃。

不过作为越来越火的scala,自然 官方不养,就自己生嘛。 作为 scala使用GRPC 衔接的子框架:ScalaPB 无疑在众多框架中独树一帜。

https://scalapb.github.io

登录 scalaPB的官网,就可以看到相应的使用tutorial,内容非常详实,不过需要你最好有使用scala 建构工具sbt的使用经验。

预准备:

1.mac  【windows 下请大家自行尝试,估计不会太难】

2.安装 jdk 8  ,scala 2.12 ,sbt,Protobuf,grpc,IDEA IDE

3.IDEA 安装plugin:Protobuf  Support 插件

开始:

在IDEA 创建 scala  sbt 项目 ,创建及编译过程中假如出现问题,莫慌,可以查看  此文

IDEA 创建 scala sbt 项目

另外在我创建时 还出现了 因为sbt -version的问题,后来也不了了之。

等待项目编译好后,在 src/main目录下会有  scala  resources   java  三个文件夹,在src/main 文件夹中新建  名称为:protobuf 的文件夹,因为 scalaPB插件默认会在scr/main/protobuf下遍历 后缀为.proto的文件  生成scala文件。

To automatically generate Scala case classes for your messages add ScalaPB’s sbt plugin to your project. Create a file named project/scalapb.sbt  containing the following line:

addSbtPlugin("com.thesamet"%"sbt-protoc"%"0.99.8")libraryDependencies+="com.trueaccord.scalapb"%%"compilerplugin"%"0.6.0-pre4"


ScalaPB 实战 quickStart 【scala grpc】 1_第1张图片

在 项目的project 目录下创建 scalapb.sbt 文件,然后 粘贴其上的内容  

addSbtPlugin("com.thesamet"%"sbt-protoc"%"0.99.8")libraryDependencies+="com.trueaccord.scalapb"%%"compilerplugin"%"0.6.0-pre4"

然后在 项目的 build.sbt 中插入 其上的内容 ,注意 ,一定要回车与原来的代码隔一行,否则会报错,

PB.targetsinCompile:=Seq(scalapb.gen()->(sourceManagedinCompile).value)

然后  在Terminal  进入sbt repl 环境下,输入 compile命令 ,则sbt 开始加载 scalapb 插件。

假如你需要在 sbt  compile 编译时就从protobuf文件生成scala文件则 需要在build.sbt中 插入

libraryDependencies+="com.trueaccord.scalapb"%%"scalapb-runtime"%com.trueaccord.scalapb.compiler.Version.scalapbVersion%"protobuf"

之后在 src/main/protobuf 目录下创建  。proto文件 ,例如创建person.proto

scalapb 默认是使用protobuf 2的,假如你想使用protobuf 3 ,则需要在proto文件中指定

另外 scalapb在生成的scala文件中存在一个bug ,就是假如在proto文件中没有指定 package ,则生成的scala文件的 package 是多一个 点.,导致文件报错,无法编译,所以需要 在proto指定包名,而且需要在 src/main/scala 下最好存在相应的package 。

还有也可以同时一起生成java 文件,需要在 build.sbt指定其命令


ScalaPB 实战 quickStart 【scala grpc】 1_第2张图片

注意插入的时候记着隔一行回车。

在proto文件中 指定 protobuf版本 命令

syntax ="proto3";

在proto文件中指定 package名 命令

package  包名;    例如 package custom_options;

在proto文件中 引入 proto 描述文件

import       “google/protobuf/descriptor.proto";

在proto文件中 继承 重写某些方法

extend google.protobuf.FileOptions {   optional string my_file_option =50000; }

创建好的person.proto 文件如下


ScalaPB 实战 quickStart 【scala grpc】 1_第3张图片

之后点击 IDEA 的SBT viewer 然后项目则开始根据person.proto  文件生成 scala和java文件在  项目的 /target/scala-2.12/src_managed/main中生成文件。


ScalaPB 实战 quickStart 【scala grpc】 1_第4张图片

然后大家把生成的scala或者java 代码 粘贴到src/main /scala 相应的包中即可 ,然后可以使用

至此 scalaPB 的入门基本可以告于段落,另外 ScalaPB 还支持  单独的cli方式使用,还支持生成scala.js,还支持生成spark sql,还有json文件,默认情况下  GRPC是打开的,假如需要关闭则可以在build.sbt中指定

PB.targets  in  Compile:=Seq ( scalapb.gen(grpc=false) - >(sourceManaged in Compile).value)


ScalaPB 实战 quickStart 【scala grpc】 1_第5张图片

你可能感兴趣的:(ScalaPB 实战 quickStart 【scala grpc】 1)