Nacos SDK for Scala 发布

简介:

脱胎于历经阿里巴巴10年生产验证的内部产品,支持具有数百万服务的大规模场景,Nacos作为高性能的动态服务发现、配置管理和服务管理平台从2018年开源以来,版本迭代速度很快,已经发布到1.2.1,已支持企业使用Nacos生产高可用。Nacos社区一直持续投入多语言建设,目前支持主流微服务开发语言及主流服务框架和配置管理框架。

lALPD2sQrY41WN7NAYrNBDg_1080_394_png_720x720q90g

本文作者是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 中文文档)。

lALPD3W5KXyI2N_NAi_NBCQ_1060_559_png_720x720q90g

使用了 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。

完整文档请访问: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
Nacos Python SDK 强势来袭,动态管理大模型 Prompt!
Nacos Python SDK——nacos-sdk-python1.0.0 稳定版正式发布啦!
1445 139
|
编译器 Linux Nacos
请问Nacos cpp sdk 有计划支持vs吗?
请问Nacos cpp sdk 有计划支持vs吗?
332 1
|
负载均衡 Cloud Native 算法
云原生nacos之服务发现SDK
云原生nacos之服务发现SDK
云原生nacos之服务发现SDK
|
运维 Cloud Native Java
云原生之nacos 配置SDK解读
云原生之nacos 配置SDK解读
云原生之nacos 配置SDK解读
|
缓存 自然语言处理 Cloud Native
双十一购物节,Nacos 1.4.0 + Go SDK 1.0.1发布
一年一度的双十一购物节又来了,不知道小伙伴们有没有抢到想要的商品呢? 无论您是否“剁手”成功,Nacos都为社区的各位奉上礼物庆祝双十一 -- `Nacos 1.4.0`和`nacos-sdk-go 1.0.1`正式发布。
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
3172 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
2042 159
|
存储 Kubernetes 安全
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
无论是使用 Nacos-Controller 实现配置的双向同步,还是直接在应用中接入 Nacos SDK 以获得更高级的配置管理特性,都能显著提升配置管理的灵活性、安全性和可维护性。使用 Nacos,您能够更好地管理和优化您的应用配置,从而提高系统的稳定性和可靠性。
1272 50
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
1430 224
|
存储 人工智能 测试技术
Nacos托管LangChain应用Prompts和配置,助力你的AI助手快速进化
AI 应用开发中,总有一些让人头疼的问题:敏感信息(比如 API-KEY)怎么安全存储?模型参数需要频繁调整怎么办?Prompt 模板改来改去,每次都得重启服务,太麻烦了!别急,今天我们就来聊聊如何用 Nacos 解决这些问题。