脱胎于历经阿里巴巴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 SDK for Scala 既可以 将 Nacos 引入 Scala 生态环境,作为微服务应用里的配置管理和服务发现机制。同时,也可以 将 Scala/Akka/Play 引入 Java 以及 Spring 微服务环境,可以让你在微服务开发中混合使用 Java/Spring Cloud、Scala 应用、 Akka 应用和 Play 应用。它们都通过 Nacos 作为统一的配置管理和服务发现机制。

HOCON:使用 HOCON 文件格式的 JVM 语言配置库。
Akka:一个用于构建高并发、分布式和弹性消息驱动的 Java 和 Scala 应用程序的工具包。可以更轻松地构建强大的反应式、并发和分布式应用程序。
Akka Discovery:可以使用不同技术提供的服务发现。它允许委托端点查找,这样可以根据环境的不同,通过配置文件以外的其他方式来配置服务。
Play:基于一个轻量级、无状态、Web友好的架构,以便使用 Java 和 Scala 轻松构建Web应用程序。Play 基于 Akka 构建,为高可扩展的应用程序提供了可预测和最小的资源消耗(CPU、内存、线程)。
Play-WS:Play 框架实现的异步 HTTP 客户端。

背景

作者是一个 12 年的开发老兵,从 2012 年开始接触并在工作中使用 Scala。经历过纯 Scala 的业务开发,也经历过纯 Java/Spring 的业务开发, 也用 Scala 写过 Spring 应用。使用 Scala 写 Spring 有些问题,在单个服务里混用 Java 和 Scala 两种语言造成不懂 Scala 的开发人员难以接手维护, 而且也造成代码理解和维护困难……。后来,随着微服务的兴起,各服务之间通过接口调用,服务内部实现细节被隐藏起来。作者就在思考是否可以将某些服务使用 Scala 开发并和 Java/Spring 的服务相互配合。

再后来在网上发现了阿里开发的 Nacos,对其作了短暂调研后将其引入作为我们的配置管理和服务发现机制。Nacos 的如下优点很吸引我们:

  • 中文社区:学习和问题解决更方便
  • 可单独使用:纯 Scala 应用也可以使用
  • 支持 Spring Cloud:团队里大部分成员都有 Spring 开发经验

这样,在 2019 对公司产品进行微服务改造时就选择了 Nacos,并将消息、任务调度、文件、日志等工具性质的服务使用 Scala/Akka 实现,其余业务服务继续 使用 Spring。Spring 与 Scala 服务之间通过 gRPC 相互调用,文件服务因需要向公网提供接口,使用 Akka HTTP 提供了 RESTful 服务 (有兴趣的读者可以参阅作者翻译的 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.getServerStatusassert(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.getServerStatusassert(status == "UP")
}

HOCON 配置

Nacos4s 支持使用 HOCON 作为配置文件。application.conf :

nacos4s.client {naming {serverAddr = "127.0.0.1:8848"namespace = ""autoRegisterInstance = on # trueserviceName = "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。

完整文档请访问:Nacos SDK for 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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

Nacos SDK for Scala 发布相关推荐

  1. Nacos 1.1.0发布,支持灰度配置和地址服务器模式

    Nacos 是阿里巴巴开源的配置中心和服务发现产品,开源距今已经超过一年的时间.本次1.1.0的发布,带来了许多重量级的特性更新,包括灰度配置等社区呼声很高的特性,下面会介绍1.1.0版本发布的新特性 ...

  2. 修改Intellij IDEA中工程对应的Java SDK、Scala SDK

    如果编译Scala工程时,遇到如下异常: can't expand macros compiled by previous versions of Scala 很可能是工程的scala版本,和依赖的包 ...

  3. Nacos 1.1.4 发布,业界率先支持 Istio MCP 协议

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! Nacos 是阿里巴巴开源的服务发现与配置管理项目,本次 ...

  4. ArcGIS API for JavaScript 各个版本的SDK下载和发布 ,ArcGIS Runtime SDK for Android、ArcGIS Runtime SDK for Java等

    ArcGIS API for JS 官网地址:https://developers.arcgis.com/javascript/ ArcGIS API for JavaScript 各个版本的SDK下 ...

  5. ASP.NET Core使用Nacos SDK访问阿里云ACM

    背景 前段时间,cranelee 在Github上给老黄提了个issues, 问到了如何用Nacos的SDK访问阿里云ACM. https://github.com/catcherwong/nacos ...

  6. .Net Micro Framework SDK 2.5 发布

    3月6日,微软.Net Micro Framework SDK 2.5 在MSDN上提供了下载链接(http://www.microsoft.com/downloads/details.aspx?fa ...

  7. 图像处理VintaSoftImaging.NET SDK控件发布v7.0版本

    近日,VintaSoftImaging.NET SDK发布了新版本v7.0.该控件包发生了显著地变化,图形用户界面控件支持WinForms和WPF.能够把库移植到其它平台和开发环境中,同时最大限度地提 ...

  8. Nacos 1.0.1 发布,社区一起定义的 Nacos

    Nacos 1.0.1是 GA 之后的第一个版本,除了修复1.0.0中的一些 bug 外,还在社区反馈的基础上,吸收了大量的社区共建PR.这个版本中除了原有的贡献者外,新增了 13 名社区的贡献者,总 ...

  9. html5 游戏广告 sdk,帷千动媒SDK 3.0发布 基于HTML5富媒体广告

    HTML5在广告方面的潜力越发凸显,尤其是在移动设备端的广告创意表现得让人倍感惊喜.近日,国内移动广告领航者的帷千动媒正式发布其广告SDK 3.0版本,该版本是基于HTML5的富媒体广告形式进行更多扩 ...

最新文章

  1. 2019 CES展上最受外媒体关注的中国机器人产品及技术
  2. Fork 一个仓库并同步
  3. WebPart的三种部署方法
  4. tp5视图里写原生php,tp5中使用原生sql查询总结
  5. jsp头文件的内容/response.setHeader
  6. “约见”面试官系列之常见面试题第三十八篇之js常见的继承方式(建议收藏)
  7. linux标准I/O——按行输入和输出
  8. 基于9款CSS3鼠标悬停相册预览特效
  9. VMware中的三种网络模式-----NAT模式
  10. django项目基础
  11. TCP传输的三次握手四次挥手策略
  12. 算法导论5.1 雇用问题
  13. 怎么打小广告html,【制作】7个技巧教你如何完成一条低成本广告制作
  14. 【应用】Android平台最佳健身
  15. spring security +oauth2(授权服务和资源服务分离) 解决getPrincipal只返回用户名的问题
  16. 怎样在PDF文档中添加插入图片
  17. NTP和chrony时间同步
  18. javaweb医院绩效考核管理信息系统
  19. OpenCV双目鱼眼相机标定
  20. Virus.Win32.Ramnit.X,Virus.Win32.Ramnit.a病毒

热门文章

  1. c matlab.h,用matlab和c写程序,include的mex.h在哪里?
  2. linux 串口格式化输出字符串,如何把电压这个浮点值转字符串输出到串口
  3. md5值是什么意思_详解:PER?霍林格效率值?这个最火的高阶数据究竟是什么意思?...
  4. 【LeetCode笔记】226. 翻转二叉树(Java、递归)
  5. 【学习笔记】JAVA基础——异常处理部分
  6. java games_Java Me Games
  7. 19秋学期计算机网络基础在线作业,南开19秋学期(1709、1803、1809、1903、1909)《计算机网络基础》在线作业资料答案3...
  8. eprime经典程序案例_小程序经典案例!写字楼里的小店铺如何利用小程序增加人流量!...
  9. 推荐几个出论文的好方向!!
  10. 8篇SCI,总影响因子46.464!这位博士,毕业后带着女友一起援疆!