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.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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对话阿里云:开源与自研如何共处?

头图 | CSDN 下载自东方 IC来源 | CSDN(ID:CSDNnews)责编 | 晋兆雨从「鲜为人知」的专业名词,到 2006 年的精准定义,再到如今全面上云时代的「百花齐放」,云计算的发展趟过蛮荒之地,已形成极具规…

Flink 流批一体的实践与探索

自 Google Dataflow 模型被提出以来,流批一体就成为分布式计算引擎最为主流的发展趋势。流批一体意味着计算引擎同时具备流计算的低延迟和批计算的高吞吐高稳定性,提供统一编程接口开发两种场景的应用并保证它们的底层执行逻辑是一致的。对用户来说流批一…

uniapp 用户登录

文章目录一、登录基础1. 登录组件2. 页面引用组件3. 明确登录的实现思路4. 封装 action 调用登录接口5. 保存用户登录状态6. 成已登录的用户视图6. 现退出登录功能一、登录基础 1. 登录组件 对于 登录 功能来说提供了两个登录的入口。 那么大家想一下,现在我们已…

Vue 组件开发 - 数据输入框组件

目录 设计通用组件的一般思路组件效果1. HTML结构2. index.js3. input-number.js3.1 input-number.js代码注解设计通用组件的一般思路 明确需求; 设计API(组件的API:只来自props、events 和 slots); 2.1 确定命名、规则 2.2 编写业务逻辑 即使逻辑的第一版没做好,后续还可…

PyFlink 社区扶持计划正式上线!

Flink 从 1.9.0 版本开始增加了对 Python 的支持(PyFlink),最新发布的 Flink 1.10 中明确目前 PyFlink 生态的功能特性在社区的努力下逐步完善。为了让大家更好的上手使用 PyFlink,自即日起,PyFlink 社区扶持计划正式上…

活动预告 | 2020移动云客户高端峰会即将揭幕,邀您一起携手云端!

一直以来,移动云致力于不断丰富自身产品体系,延伸服务深度和广度,提供“云网一体、贴身服务、随心定制、安全可控”的云服务,致力成为5G时代你身边的智慧云。依托中国移动网络资源与本地化服务团队,移动云为政府、互联…

如何在CDN边缘节点执行你的JavaScript?

Serverless和边缘计算都是目前云计算领域备受瞩目的研究和应用方向。做为拥有超过130Tbps带宽分发能力的阿里云CDN,巨大的边缘网络有超过2800个节点遍布全球,如何将中心源站的计算能力下沉到边缘节点,进一步降低客户端访问延时进而提升用户体…

微信小程序+腾讯地图 获取定位与地图选点插件

文章目录一、思路二、逆地址解析2.1. app.json2.2. 页面加入2.3. 后台代码三、地图插件调用3.1. app.json加入3.2. js页面加入3.3. wxml页面成功截图:腾讯位置服务官网: https://lbs.qq.com一、思路 通过 wx.getLocation 返回经纬度传到后台,后台调用腾…

前端工具安装和运行相关

目录1. nodemon 运行出错:无法运行脚本2. XXX~待续1. nodemon 运行出错:无法运行脚本 无法加载文件 C:\Users\xxx\AppData\Roaming\npm\nodemon.ps1,因为在此系统上禁止运行脚本。 解决办法: 管理员身份打开powerShell&#xf…

友盟+联合EB级云数据 实现友盟域和企业私域数据全面融合

友盟联合EB级云数据 实现友盟域和企业私域数据全面融合 2020-04-28 互联网大数据计算 国内领先的第三方全域数据智能服务商友盟,联合阿里云EB级云数据仓库MaxCompute为企业提供面向分析的,实现友盟域数据与企业私域数据全面融合的自助分析服务“U-DOP…

VMware连续三年获评Gartner广域网边缘基础设施魔力象限领导者

在2020年《Gartner广域网边缘基础设施边缘架构关键能力》报告中,VMware获评五大应用场景中的三大场景最高产品评分和四大场景优秀评级 中国北京,2020年10月20日——全球领先的企业软件创新者VMware(NYSE:VMW)近日宣布…

微信小程序之实现地图定位(使用腾讯位置服务插件)

文章目录一. 腾讯位置服务插件简介1. 完整的地图能力2. 地图插件的优势二. 开通腾讯位置服务三、接入插件四、 开发者密钥配置五、插件的使用一. 腾讯位置服务插件简介 1. 完整的地图能力 腾讯位置服务基于微信提供的小程序插件能力,专注于(围绕&#…

分享16个经典的免费UI素材网站

免费字体 www.fontspace.com 一键AI抠图 www.remove.bg/zh 在线PS工具/可以转换Sketch文件

单人开发场景下的测试环境实践

在软件研发过程中,“测试环境”是部署最频繁、也是开发者使用最频繁的一种运行环境,稳定而易用的测试环境能够极大提高开发者的工作效率和幸福感。为更好的将阿里巴巴在测试环境管理方面的实践和经验跟广大开发者分享,《云效说码》策划了《阿…

函数计算如何访问 PostgreSQL 数据库

函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并…

智能可穿戴迎来长续航焕新活力 出门问问TicWatch Pro 3即将国内上市

人工智能独角兽公司出门问问将于10月21日面向国内市场正式发布全新一代旗舰级全智能手表TicWatch Pro 3(4G版)。出门问问携手新浪科技举行新品线上发布会,出门问问创始人兼CEO李志飞以及出门问问研发高级总监张博将以直播形式与消费者见证Tic…

uniapp 微信小程序打包发布

文章目录一、打包小程序1. HBuilder X打包2. 小程序发行3. 点击上传4. 扫码体验5. 正式版本一、打包小程序 1. HBuilder X打包 选中项目-点击发行(U)- 小程序-(微信仅适用于uniapp)(W) 2. 小程序发行 填写微信小程序名称和微…

祝贺!两位 Apache Flink PMC 喜提 Apache Member

摘要:近期 Apache 软件基金会(以下简称 ASF )举行了一年一度的董事会选举会议,两位 Apache Flink PMC 当选为 2020 年 ASF 新成员,即 Apache Member。目前,国内(华人)近 30 位 Apach…

Vue自定义指令-实时时间转换指令 v-time开发

目录 前言1. 新建html、index.js文件2. 时间转换逻辑3. 新建 time.js 文件4 总结前言 为了显示出 实时性 ,在一些社交类产品中,比如WX朋友圈或微博等地方,作者发布动态的时间会实时显示为“ 刚刚”、“ 1小时前”、“ 1天前” 等不同的格式。也就是一个相对本机时间转换后的…

Iceberg 在基于 Flink 的流式数据入库场景中的应用

本文以流式数据入库的场景为基础,介绍引入 Iceberg 作为落地格式和嵌入 Flink sink 的收益,并分析了当前可实现的框架及要点。 应用场景 流式数据入库,是大数据和数据湖的典型应用场景。上游的流式数据,如日志,或增量…