ScalaPB 實戰(zhàn) quickStart 【scala grpc】 1

作為 一款 面向?qū)ο蠛瘮?shù)式編程的語言 ,scala 如此優(yōu)秀,可是在RPC框架中,竟然被Thrift && protobuf &&GRPC所遺忘,也有可能是scala的門檻實在是太高,導致這些rpc框架選擇放棄。

不過作為越來越火的scala,自然 官方不養(yǎng),就自己生嘛。 作為 scala使用GRPC 銜接的子框架:ScalaPB 無疑在眾多框架中獨樹一幟。

https://scalapb.github.io

登錄 scalaPB的官網(wǎng),就可以看到相應(yīng)的使用tutorial,內(nèi)容非常詳實,不過需要你最好有使用scala 建構(gòu)工具sbt的使用經(jīng)驗。

預(yù)準備:

1.mac ?【windows 下請大家自行嘗試,估計不會太難】

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

3.IDEA 安裝plugin:Protobuf ?Support 插件

開始:

在IDEA 創(chuàng)建 scala ?sbt 項目 ,創(chuàng)建及編譯過程中假如出現(xiàn)問題,莫慌,可以查看 ?此文

IDEA 創(chuàng)建 scala sbt 項目

另外在我創(chuàng)建時 還出現(xiàn)了 因為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"


在 項目的project 目錄下創(chuàng)建 scalapb.sbt 文件,然后 粘貼其上的內(nèi)容 ?

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

然后在 項目的 build.sbt 中插入 其上的內(nèi)容 ,注意 ,一定要回車與原來的代碼隔一行,否則會報錯,

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

然后 ?在Terminal ?進入sbt repl 環(huán)境下,輸入 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 目錄下創(chuàng)建 ?。proto文件 ,例如創(chuàng)建person.proto

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

另外 scalapb在生成的scala文件中存在一個bug ,就是假如在proto文件中沒有指定 package ,則生成的scala文件的 package 是多一個 點.,導致文件報錯,無法編譯,所以需要 在proto指定包名,而且需要在 src/main/scala 下最好存在相應(yīng)的package 。

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


注意插入的時候記著隔一行回車。

在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; }

創(chuàng)建好的person.proto 文件如下


之后點擊 IDEA 的SBT viewer 然后項目則開始根據(jù)person.proto ?文件生成 scala和java文件在 ?項目的 /target/scala-2.12/src_managed/main中生成文件。


然后大家把生成的scala或者java 代碼 粘貼到src/main /scala 相應(yīng)的包中即可 ,然后可以使用

至此 scalaPB 的入門基本可以告于段落,另外 ScalaPB 還支持 ?單獨的cli方式使用,還支持生成scala.js,還支持生成spark sql,還有json文件,默認情況下 ?GRPC是打開的,假如需要關(guān)閉則可以在build.sbt中指定

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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容