Nacos SDK for Scala 發佈

脫胎於歷經阿里巴巴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:

# 點下“看”❤️

# 然後,公衆號對話框內發送“隨身杯”,試試手氣?????

# 本期獎品是來自淘寶心選的城市單手開隨身杯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章