当前位置: 首页 > article >正文

Nacos 入门教程

一 、Nacos快速入门

  1. 什么是 Nacos
  • Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  • Nacos 致力于帮助您发现、配置和管理微服务。Nacos
    提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

  • Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构
    (例如微服务范式、云原生范式) 的服务基础设施。

  1. 为什么是Nacos

常见的注册中心:

  1. Eureka(原生,2.0遇到性能瓶颈,停止维护)

  2. Zookeeper(支持,专业的独立产品。例如:dubbo)

  3. Consul(原生,GO语言开发)

  4. Nacos

相对于 Spring Cloud Eureka 来说,Nacos 更强大。
Nacos = Spring Cloud Eureka + Spring Cloud Config + Bus
Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery实现服务的注册与发现
  1. 可以干什么

Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:

  1. 服务发现和服务健康监测

  2. 动态配置服务

  3. 动态DNS服务

  4. 服务及其元数据管理

  1. Nacos快速开始

结构图:
在这里插入图片描述
Nacos 依赖 Java 环境来运行。建议直接使用docker进行安装。运行成功后,nacos默认在8848端口提供了一个web管理界面,如下:
在这里插入图片描述

二 、Nacos注册中心入门

创建两个工程,一个是nacos-provider(被调用者), 另一个是naocos-consumer(调用者)

  • nacos-provider

添加nacos-provider的依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent><properties><java.version>1.8</java.version>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><--服务发现依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.1.2.RELEASE</version></dependency><!--服务配置依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.1.2.RELEASE</version></dependency>
</dependencies>
<!--SpringCloud的依赖-->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

provider基本代码

@RestController
public class ProviderController {@GetMapping("invoke")public String invoke() {return LocalTime.now() + " invoke;}
}

application.yml

server:port: 8070
spring:application:name: nacos-providercloud:# nacos服务地址nacos:server-addr: 127.0.0.1:8848

在启动类上添加@EnableDiscoveryClient注解

  • nacos-consumer

添加nacos-consumer依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent>
<properties><java.version>1.8</java.version>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.1.2.RELEASE</version></dependency>
</dependencies>
<!--SpringCloud的依赖-->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

consumer基本代码

@RestController
public class ConsummerController {@Autowiredprivate ProviderFeign providerFeign;@GetMapping("/test")public String test() {return providerFeign.invoke();}
}
@FeignClient("nacos-provider")
public interface ProviderFeign {@GetMapping("invoke")String invoke();
}

application.yml

server:port: 8071
spring:application:name: nacos-consumercloud:# nacos服务地址nacos:server-addr: 127.0.0.1:8848

在启动类添加@EnableFeignClients,@EnableDiscoveryClient注解

调用结果:
在这里插入图片描述

三、Nacos入门配置中心

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
如果微服务架构中没有使用统一配置中心时,所存在的问题:

  1. 配置文件分散在各个项目里,不方便维护

  2. 配置内容安全与权限

  3. 更新配置后,项目需要重启

nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动
在这里插入图片描述
在这里插入图片描述

nacos与 Spring Cloud的整合:

  • 1.在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默认为所属工程配置spring.application.name 的值(即:nacos-provider),也可以通过配置项 spring.cloud.nacos.config.prefix来配置;

  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  • file-exetension 为配置内容的数据格式,可以通过配置项
    spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型;默认为 properties ;

在这里插入图片描述
在这里插入图片描述
即 dataId 为 配置所属工程的spring.application.name的值 + “.” + properties/yml;

官方文档:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

  • 2.配置内容:项目中易变的内容

从配置中心读取配置

  • 添加配置依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.1.2.RELEASE</version>
</dependency>

版本说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
在 bootstrap.yml中配置 Nacos server 的地址和应用名

spring:cloud:nacos:server-addr: 127.0.0.1:8848# 该配置影响统一配置中心中的dataId,之前已经配置过application:name: nacos-provider

注意:bootstrap.yml添加了spring.application.name,在appliation.yml不需要再添加;之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。在springboot工程中,bootstrap.properties的加载优先级更高

@RefreshScope
@RestController
public class ProviderController {@Value("${DevConfig}")private String devConfig;@GetMapping("invoke")public String invoke() {return LocalTime.now() + " invoke,devConfig:" + devConfig;}
}

调用结果:
在这里插入图片描述

  • 名称空间切换环境(相当于使用springcloud config时的git仓库的作用)

在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的= namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离;

在这里插入图片描述
  可以发现有四个名称空间(不同的项目之间,可以使用同一个nacos服务,只需要新建命名空间就可以,无须一个项目配套一个nacos服务)`public(默认)以及我们自己添加的3个名称空间(prod、dev、test),可以点击查看每个名称空间下的配置文件,当然现在只有public下有一个配置。默认情况下,项目会到public下找 服务名.properties文件。接下来,在dev名称空间中也添加一个nacos-provider.properties配置。这时有两种方式:

  1. 切换到dev名称空间,添加一个新的配置文件。缺点:每个环境都要重复配置类似的项目

  2. 直接通过clone方式添加配置,并修改即可(推荐)

在这里插入图片描述
  编辑  
在这里插入图片描述

在服务提供方nacos-provider中切换命名空间,修改bootstrap.yml添加如下配置

spring:cloud:nacos:config:namespace: 288ad42c-c8e0-4b92-b8df-7d7883ad8507

namespace的值为:
在这里插入图片描述
重启服务,调用结果:
在这里插入图片描述

  • 回滚配置
      在这里插入图片描述
    在这里插入图片描述
  • 加载多配置文件
      偶尔情况下需要加载多个配置文件。假如现在dev名称空间下有三个配置文件:nacos-provider.properties、redis.properties、jdbc.properties

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
nacos-provider.properties默认加载,怎么加载另外两个配置文件?

在bootstrap.yml文件中添加如下配置:

spring:cloud:nacos:server-addr: 127.0.0.1:8848config:extension-configs:- refresh: truedata-id: redis.properties- refresh: truedata-id: jdbc.properties

修改上面的代码:
注意该注解:@RefreshScope 是scopeName="refresh"的 @Scope

@RefreshScope//实现nacos的自动刷新
@RestController
public class ProviderController {@Value("${DevConfig}")private String devConfig;@Value("${jdbc.url}")private String jdbcUrl;@Value("${redis.url}")private String redisUrl;@GetMapping("invoke")public String invoke() {return LocalTime.now() + " invoke,devConfig:" + devConfig +",jdbcUrl:" + jdbcUrl + ",redisUrl:" + redisUrl;}
}

在这里插入图片描述

  • 配置的分组

在实际开发中,除了不同的环境外。不同的微服务或者业务功能,可能有不同的redis及mysql数据库,也就说每个微服务项目可能会有相应的开发环境,测试环境,预发环境,生产环境等;区分不同的环境我们使用名称空间(namespace),区分不同的微服务或功能,使用分组(group)。也可以反过来使用,名称空间和分组只是为了更好的区分配置,提供的两个维度而已;

新增一个redis.properties,所属分组为nacos-provider:
在这里插入图片描述
现在开发环境中有两个redis.propertis配置文件,一个是默认分组(DEFAULT_GROUP),一个是provider组。默认情况下从DEFAULT_GROUP分组中读取redis.properties,如果要切换到nacos-provider分组下的redis.properties,需要修改如下配置:

spring:cloud:nacos:server-addr: 127.0.0.1:8848config:extension-configs:- refresh: truegroup: nacos-providerdata-id: redis.properties- refresh: truedata-id: jdbc.properties   

原文地址1:https://www.cnblogs.com/coder-zyc/p/12821732.html
原文地址2:https://www.cnblogs.com/coder-zyc/p/12821777.html
原文地址3:https://www.cnblogs.com/coder-zyc/p/12821932.html

http://www.lryc.cn/news/2420039.html

相关文章:

  • 再见,Anaconda的安装和配置老大难问题!
  • Pytorch 最全入门介绍,Pytorch入门看这一篇就够了_pytorch csdn
  • 【设计模式】UML建模之包图、组件图和部署图学习笔记
  • IDEA2023使用手册 【持续更新...】
  • Docker-常用命令大全(附命令详解)
  • emplode php|,PHP版单点登陆实现方案
  • 看美国影片必须了解的英文粗语脏话,好不容易整理出来的
  • 酒吧管理系统、酒吧销售系统
  • 3d弹珠小游戏的制作
  • 将Tp-link无线路由器桥接到Dlink无线路由器上
  • Go 语言 tag 的用处?
  • 如何让游戏中的随机因素重新赢得玩家信任
  • 卡巴斯基误报处理
  • 在智博会上大展异彩的忽米网到底有什么厉害之处?
  • Consul 基本概念、内部原理
  • 如何更改html的默认应用,win10如何修改默认应用
  • 人脸识别主要算法原理
  • 中级软件设计师知识总结
  • FreeBSD7.0 中安装fcitx
  • 数据结构视频教程 -《(东南大学 王茜)数据结构 (64讲)》
  • 仕様書を読んでいます
  • 2020年12月统考练习题
  • Flash与Flex3的配合,特总结一下心得体会
  • 赛迪Symbian-OS-C++移动开发与实例视频教程
  • 网络工程师
  • RENIX 软件如何进行IP地址管理——网络测试仪实操
  • 奶奶版ChatGPT炸了!背刺微软泄露Win11秘钥!
  • 算法题之打家劫舍
  • 高通WCD9375音频编解码器/数字滤波器芯片介绍
  • 代码思维?烤肠3块1根,5块2根,女子直接报警称诈骗