nacos最新稳定版本(nacos 版本)
一、Nacos介绍
6月份阿里开源的Nacos发布了1.0.1版本,从去年7月份第一个release版本到现在一直在默默关注
官方的版本规划为:Nacos从0.8.0开始支持生产可用,1.0版本可大规模生产可用,2.0版本接入k8s、SpringCloud、ServiceMesh、ServerLess
公司目前的项目都是Springcloud,由于eureka2.X的断更、以及Nacos面世,所以自然而然最近就进行了一次试水爬坑,虽然过程艰苦,但是最终效果似乎还不错。
本文主要从以下几点来带大家熟悉下Nacos
Nacos是什么?好像没听过,不要紧。那Eureka听说过吧,在SpringCloud中做服务注册中心组件,类似的还有Zookeeper、Consul。
所以Nacos也是一个注册中心组件咯,当然是,不过 它不仅仅是注册中心 。
Nacos也是一个配置中心 ,比如SpringCloud中的Config,将配置文件版本化管理。
那么Nacos到底是什么呢, 总结为官网一句话就是:
首先要说Nacos的发展历程就要从阿里巴巴的内部产品ConfigServer说起了,因为 Nacos是ConfigServer 的开源实现
早在2008年阿里就开始服务化的进程(那个时候我好像还在上初中啊),在那个时候阿里内部自研的服务发现解决方案就叫做ConfigServer
ConfigServer经历了十年的发展从V1.0的单机版演变为目前对外公布的V4.0集群版。
2018年7月阿里巴巴高级技术专家许真恩(慕义)发布了Nacos首个开源版本V0.1.0,Nacos作为ConfigServer的开源实现截止目前已经更新到了V1.0.1的大版本,并且支持大规模生产版本。
虽然 官方文档 也有介绍,但是语言比较官方,我就用大白话谈一点自己的使用感受。
首先先上一张官方的生态图
除了对于阿里开源生态体系如 Dubbo 等自身的支持,也非常强调融入其它的开源生态,这里就包括 Java 的微服务生态体系 Spring Cloud,Kubernetes/CNCF 云原生生态体系。
Nacos 无缝支持 Spring Cloud,为 Spring Cloud 用户其提供更简便的配置中心和注册中心的解决方案。
Nacos支持目前几乎所有主流的微服务生态体系。
Nacos从官方的介绍上看,就像是SpringCloud中Eureka+Config+Bus+Git+MQ的一个结合体,当然也不能完全这么理解。Nacos是脱胎于阿里内部的ConfigServer,而ConfigServer早在3.0版本就解决了Eureka在1.0版本留下的隐患,所以从技术的更新和迭代角度来看,稳定版本的Nacos将更适合做为微服务体系中的服务注册发现组件,当然了他也不单单只是注册和发现。更多的特性和功能,不如一起搭建试试吧。
Nacos官方手册
Dalston.RELEASE版本 Eureka 升级为Nacos
当前版本:
因为我们使用的Spring Cloud 版本太低,所以可能出现版本依赖的问题
Nacos 属于Spring Cloud Alibaba 体系,我们参考Spring Cloud 官网的版本对应关系
Spring Cloud的E版本最低也要求1.5的版本,所以我这里只能选在nacos 的版本也为1.5
但是当我启动项目的时候发现报错
就是我们在创建 nacosAutoServiceRegistration 对象时候报错。我们进入该类
NacosAutoServiceRegistration 来自于 spring-cloud-alibaba-nacos-discovery-1.5.0.RELEASE.jar
AbstractAutoServiceRegistration 来自于 spring-cloud-commons-1.2.0.RELEASE.jar.jar
Spring Cloud D版本默认依赖的是 spring-cloud-commons-1.2.0.RELEASE.jar
我们提高一下spring-cloud-commons 的版本再看一下 AbstractAutoServiceRegistration 的构造函数
很明显在更新的版本中增加了一个两个参数的构造函数。
去掉所有Eureka 的配置
spring.cloud.nacos.discovery. server-addr: 192.168.1.10:8905
如果不整体重构我发现我们的项目Eureka 依赖很难去除干净所以我在需要的项目中加入了如下的两个依赖
设置Scope 为test 这样子正式打包的时候就排除掉了Eureka 的依赖, 很取巧但是不可取 。
下一篇 Nacos 服务监听
【Nacos专题】Nacos 快速入门
Nacos 英文全称 Dynamic Naming and Configuration Service,它是 Spring Cloud Alibaba 的核心组件之一,致力于微服务架构中的服务注册与发现、配置管理。
Nacos 将注册中心和配置中心整合在一起,提供了两个核心功能,即服务注册与发现和动态配置服务。
Nacos 支持基于 DNS 和 基于 RPC 的服务发现,服务提供者向 Nacos 服务端注册服务后,服务消费者可以从 Nacos 服务端获取注册列表。
提供了一个简洁易用的 UI,方便用户管理所有环境的应用配置和服务配置,消除了配置变更时服务需重新部署的过程。还提供了包括 配置版本跟踪 、 金丝雀发布 、 一键回滚配置 以及 客户端配置更新状态跟踪 在内的一系列开箱即用的配置管理特性,大大降低配置变更带来的风险。
Nacos 分为服务端和客户端,服务端用来提供服务发现与注册等功能,客户端就是不同的应用和服务。
在 Nacos 的 Release Notes 可以看到每个版本的相关介绍。当前最新的稳定版本是 1.4.0。
Nacos 服务需要 Java 运行环境,因此,在启动服务之前需要确保你的服务器已经有了 Java 运行环境,并且配置好了 JAVA_HOME 。
参数说明:
-m:指定运行模式,standalone 表示单机模式
在 Nacos 配置文件中配置服务器ip,默认的端口号为8848,默认的用户名和密码均为nacos,访问 便能够成功登Nacos管理后台。
(1) 引入依赖
在 SpringBoot 项目中引入 Nacos 客户端依赖,pom.xml 添加如下内容:
(2) 修改配置
在 application.properties 配置文件中添加 Nacos 的基本配置 (也可以是 application.yml )
1)application.properties
2)application.yml
(3) @EnableDiscoveryClient 注解
在 SpringBoot 的启动类上添加 @EnableDiscoveryClient 注解来开启服务注册。
Nacos Discovery 默认集成了 Netflix Ribbon,服务消费者可以使用 RestTemplate 或 OpenFeign 进行服务的调用。
(1) Nacos 启动时报如下错误
问题原因:通过yum命令安装的普通的openJDK没有javac等工具,而且安装完以后连环境变量都不需要配置,就能使用 java -version 验证。
解决方案:重新安装devel开发版openJDK,开发版的openJDK有javac工具,然后配置java环境变量即可。
(2) Nacos Provider 启动报错
问题原因:没有配置 Nacos 服务端的地址,因此,当 Nacos Provider 启动的时候,无法与注册中心通信
解决方案:在配置文件中配置 Nacos 服务端地址,如下所示:
什么是Nacos?Nacos注册配置中心介绍
英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。服务在nacos是一等公民
Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑
Nacos服务领域模型主要分为命名空间、集群、服务。在下图的分级存储模型可以看到,在服务级别,保存了健康检查开关、元数据、路由机制、保护阈值等设置,而集群保存了健康检查模式、元数据、同步机制等数据,实例保存了该实例的ip、端口、权重、健康检查状态、下线状态、元数据、响应时间。这些数据的作用会在第三章讲到
服务注册方法:以Java nacos client v1.0.1 为例子,服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。
不同的命名空间逻辑上是隔离的,不特殊设置的情况下,服务不会跨命名空间请求,命名空间主要的作用是区分服务使用的范围,比如开发、测试、生产、灰度可以分别设置四个命名空间来互相隔离。
以springcloud为例,首先用maven导入nacos clinet的依赖:
先导入springcloud的alibaba-nacos-config和alibaba-nacos-discovery两个依赖,这两个依赖是用于nacos clinet与cloud结合的工具,0.2.x对应springboot 2.x.x ,0.1.x对应springboot 1.x.x。这两个组件可以和各种版本的nacos-client结合。把其中的nacos-clinet依赖给排除,引入想要引入的nacosclinet版本,如下:
在bootstrap.properties上添加配置中心的配置
在application-xxx.properties新增如下配置
如果springboot启动类没有 @EnableDiscover 注解则加上
完成如上更改,即可使用Nacos注册/配置服务
演示:
使用Feign、Ribbon均可,在这不做过多介绍
普通application参数在配置中心直接配置皆可,如果需要可以动态刷新的配置,需要在相应类上加上 @RefreshScope 注解,示例如下,当在nacos配置中心更改配置后,方法getId的值也会刷新。
配置中心参数修改/设置
如下两张图:在nacos控制台的 配置管理-配置列表 中顶部选择相应的命名空间,点击列表右上角的加号新增配置,Data ID 为 项目名-{spring.profiles.active}.properties,Group如果在bootstrap.properties中不指定则填默认的DEFAULT_GROUP,描述写该配置的描述,配置内容填写Properties格式或者Yaml格式。
在控制台的 服务管理-服务列表 选择一个服务点击详情,在下方的集群列表可以看到有上线/下线按钮,点击即可以对该实例执行上线/下线操作,下线后的实例不会被请求
可以通过手动配置权重来控制流量,当一个集群内两个实例,权重越高,到达该实例的请求比例越多。
权重的初始值是1
保护阈值的范围是0~1
服务的健康比例=服务的健康实例/总实例个数
当服务健康比例=保护阈值时候,无论实例健不健康都会返回给调用方
当服务健康比例保护阈值的时候,只会返回健康实例给调用方
在 服务管理-服务列表 选择一个服务点击详情可以配置