脫胎於歷經阿里巴巴10年生產驗證的內部產品,支持具有數百萬服務的大規模場景,Nacos作爲高性能的動態服務發現、配置管理和服務管理平臺從2018年開源以來,版本迭代速度很快,已經發布到1.2.1,已支持企業使用Nacos生產高可用。Nacos社區一直持續投入多語言建設,目前支持主流微服務開發語言及主流服務框架和配置管理框架。
本文作者是 Nacos contributor 楊景,他在 2019 對公司產品進行微服務改造時選擇了 Nacos ,獨立開發了 Nacos SDK for Scala 。
歡迎各位感興趣的開發者參與Nacos社區共建:
GitHub:
https://github.com/alibaba/nacos
官網:
https://nacos.io
概述:Nacos SDK for Scala
Nacos SDK for Scala 是基於 Nacos Java SDK 的封裝,使得在 Scala 下更易使用。支持使用 HOCON 做爲配置文件,支持 Akka Discovery 和 Play-WS 。
Nacos Java SDK:
https://nacos.io/zh-cn/docs/sdk.html
HOCON:
https://github.com/lightbend/config
Akka Discovery:
https://doc.akka.io/docs/akka/current/discovery/index.html
Play-WS:
https://www.playframework.com/documentation/2.8.x/ScalaWS
Nacos SDK for Scala 既可以 將 Nacos 引入 Scala 生態環境,作爲微服務應用裏的配置管理和服務發現機制。同時,也可以 將 Scala/Akka/Play 引入 Java 以及 Spring 微服務環境,可以讓你在微服務開發中混合使用 Java/Spring Cloud、Scala 應用、 Akka 應用和 Play 應用。它們都通過 Nacos 作爲統一的配置管理和服務發現機制。
1、HOCON:使用 HOCON 文件格式的 JVM 語言配置庫。
2、Akka:一個用於構建高併發、分佈式和彈性消息驅動的 Java 和 Scala 應用程序的工具包。可以更輕鬆地構建強大的反應式、併發和分佈式應用程序。
3、Akka Discovery:可以使用不同技術提供的服務發現。它允許委託端點查找,這樣可以根據環境的不同,通過配置文件以外的其他方式來配置服務。
4、Play:基於一個輕量級、無狀態、Web友好的架構,以便使用 Java 和 Scala 輕鬆構建Web應用程序。Play 基於 Akka 構建,爲高可擴展的應用程序提供了可預測和最小的資源消耗(CPU、內存、線程)。
5、Play-WS:Play 框架實現的異步 HTTP 客戶端。
背景
作者是一個 12 年的開發老兵,從 2012 年開始接觸並在工作中使用 Scala。經歷過純 Scala 的業務開發,也經歷過純 Java/Spring 的業務開發, 也用 Scala 寫過 Spring 應用。使用 Scala 寫 Spring 有些問題,在單個服務裏混用 Java 和 Scala 兩種語言造成不懂 Scala 的開發人員難以接手維護, 而且也造成代碼理解和維護困難……。後來,隨着微服務的興起,各服務之間通過接口調用,服務內部實現細節被隱藏起來。作者就在思考是否可以將某些服務使用 Scala 開發並和 Java/Spring 的服務相互配合。
再後來在網上發現了阿里開發的 Nacos,對其作了短暫調研後將其引入作爲我們的配置管理和服務發現機制。Nacos 的如下優點很吸引我們:
1、中文社區:學習和問題解決更方便
2、可單獨使用:純 Scala 應用也可以使用
3、支持 Spring Cloud:團隊裏大部分成員都有 Spring 開發經驗
這樣,在 2019 對公司產品進行微服務改造時就選擇了 Nacos,並將消息、任務調度、文件、日誌等工具性質的服務使用 Scala/Akka 實現,其餘業務服務繼續 使用 Spring。Spring 與 Scala 服務之間通過 gRPC 相互調用,文件服務因需要向公網提供接口,使用 Akka HTTP 提供了 RESTful 服務 ,有興趣的讀者可以參閱作者翻譯的 Akka HTTP 中文文檔:
https://www.yangbajing.me/akka-http/
使用了 Nacos 的微服務架構概圖
對於很多 Scala 愛好者,若公司主要使用 Spring 進行業務開發,恰好又使用 Nacos 作爲配置管理與服務發現工具。那你可以使用此 SDK 將使用 Scala 實現的服務接入公司的 Spring 生態裏。
快速上手
依賴
要在項目中使用,請添加以下依賴:
libraryDependencies += "me.yangbajing.nacos4s" %% "nacos-client-scala" % "1.2.1"
並添加以下依賴源:
resolvers += Resolver.bintrayRepo("helloscala", "maven")
編程使用
Nacos4sNamingService
import yangbajing.nacos4s.client.naming.Nacos4sNamingService
import yangbajing.nacos4s.client.util.Nacos4s
object NamingDemo extends App {
val namingService: Nacos4sNamingService = Nacos4s.namingService("127.0.0.0:8848", "")
val status = namingService.getServerStatus
assert(status == "UP")
}
Nacos4sConfigService
import yangbajing.nacos4s.client.config.Nacos4sConfigService
import yangbajing.nacos4s.client.util.Nacos4s
object ConfigDemo extends App {
val configService: Nacos4sConfigService = Nacos4s.configService("127.0.0.0:8848", "")
val status = configService.getServerStatus
assert(status == "UP")
HOCON 配置
Nacos4s 支持使用 HOCON 作爲配置文件。application.conf :
nacos4s.client {
naming {
serverAddr = "127.0.0.1:8848"
namespace = ""
autoRegisterInstance = on # true
serviceName = "me.yangbajing.nacos4s"
ip = "127.0.0.1"
port = 9999
}
config {
serverAddr = "127.0.0.1:8848"
namespace = ""
}
}
代碼:
val configService = Nacos4s.configService(ConfigFactory.load().getConfig("nacos4s.client.config"))
val namingService = Nacos4s.namingService(ConfigFactory.load().getConfig("nacos4s.client.config"))
服務自動註冊
在使用配置初始化 Nacos4sNamingService 時設置 autoRegisterInstance = on 可自動將服務註冊到 Nacos。
完整文檔請訪問:
https://www.yangbajing.me/nacos-sdk-scala/
源碼在:
https://github.com/yangbajing/nacos-sdk-scala
作者信息:
楊景,熟悉Java、Scala/Akka,熟悉併發編程,瞭解Spring應用框架,擅長分佈式軟件和大數據應用開發,對領域驅動設計與反應式系統設計有一定認識。在公司產品進行微服務改造過程中選用了 Nacos 並向社區貢獻 nacos-sdk-scala 客戶端以便提供 Scala 生態支持。大家可以在我的個人博客或知乎專欄上與我交流:
人個主頁:
https://www.yangbajing.me
知乎專欄:
https://zhuanlan.zhihu.com/yangbajing
本文縮略圖:icon by 金角大王
Tips:
# 點下“在看”❤️
# 然後,公衆號對話框內發送“隨身杯”,試試手氣?????
# 本期獎品是來自淘寶心選的城市單手開隨身杯。