【springcloud 微服务】Spring Cloud Alibaba Nacos使用详解

news2024/11/26 1:01:27

目录

一、前言

二、nacos介绍

2.1  什么是 Nacos

2.2 nacos 核心能力

2.2.1 服务发现和服务健康监测

2.2.2 动态配置服务

2.2.3 动态 DNS 服务

2.2.4 服务及其元数据管理

2.2.5 nacos生态地图

2.3 与其他配置中心对比

三、nacos快速部署

3.1 获取安装包

3.2 修改脚本启动模式

3.3  启动nacos 服务

3.4 访问控制台

四、连接mysql

4.1 前置准备

4.2 操作步骤

4.2.1 导入安装包下nacos的建表sql

4.2 修改配置文件

4.3 重启nacos服务

五、nacos配置管理

5.1 配置管理菜单

5.1.1 配置列表

5.1.2 历史版本

六、nacos权限管理

6.1 用户

6.2 角色

6.3 权限

七、nacos命名空间

7.1 创建命名空间

7.2 创建配置文件

八、Spring Cloud 使用 Nacos

8.1  前置准备

8.2  读取nacos配置

8.2.1 配置文件

8.2.2 nacos添加一个配置文件

8.2.3 添加测试接口

8.2.4 模拟测试

8.3  namespace与group使用

8.3.1 同一个namespace不同dataid

8.3.2 不同namespace的配置读取

 8.3.3 不同group的配置读取

8.4  nacos动态刷新配置

 九、写在最后


一、前言

nacos作为Spring Cloud Alibaba微服务体系中一个非常重要的组件,在微服务治理中担当着不可替代的角色,比如作为分布式配置中心,服务注册中心,相比其他的配置中心和注册中心来说,nacos具有更出色的性能以及云原生优势,本篇将从多个维度全面深入的学习nacos这个组件。

二、nacos介绍

nacos官网:nacos官网 ,中文参考手册地址:中文手册

2.1  什么是 Nacos

  • Nacos 致力于帮助您发现、配置和管理微服务。帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理;
  • Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施;

2.2 nacos 核心能力

2.2.1 服务发现和服务健康监测

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

1、Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求;

2、Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式;

3、Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量

2.2.2 动态配置服务

  • 动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  • 动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
  • 配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

Nacos 提供了一个简洁易用的控制台,可以管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

2.2.3 动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表

2.2.4 服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

2.2.5 nacos生态地图

2.3 与其他配置中心对比

在微服务治理生态中,作为配置中心来说其实是有很多选择的,比如大家熟知的zk,apollo,consul等,如下是springcloud生态中可以作为技术选型的配置中心对比,从各项指标对比来看,nacos可以说是非常完美的存在,其优势是不言而喻的。

三、nacos快速部署

在之前的一篇,springcloud-alibaba整合nacos 中分享了如何快速部署单机nacos,还是比较简单的,为了方便后面的演示说明,这里再简单做一下说明;

3.1 获取安装包

安装包下载地址:下载地址

选择完版本后,可以选择linux或者windows环境的安装包下载即可

我这里选择了zip压缩包

3.2 修改脚本启动模式

nacos启动脚本里面提供了集群模式和单机模式启动两种方式,由于本机搭建使用,选用单机模式即可,修改启动脚本中如下的关键参数;

3.3  启动nacos 服务

修改并保存脚本之后,双击启动服务

3.4 访问控制台

启动成功之后,按上图中地址访问nacos的客户端控制台,默认登录用户名和密码:nacos/nacos

登录成功后,看到如下的控制台界面;

四、连接mysql

配置文件的信息在实际的生产环境中是需要持久化保存的,nacos服务默认启动之后,配置信息是保存在本地内存中,一旦重新启动就丢失了,因此安全起见,我们将其配置信息持久化到数据库,配置的话也很简单,按照下面的操作步骤

4.1 前置准备

创建一个mysql数据库

4.2 操作步骤

4.2.1 导入安装包下nacos的建表sql

导入完成后,可以看到nacos的一些表

 

4.2 修改配置文件

修改conf下的application.properties,主要修改mysql的连接信息

4.3 重启nacos服务

重启之后,后面再操作nacos的数据将会存储到nacos的数据表中。

五、nacos配置管理

接下来详细说明一下配置管理中相关重要的菜单项的使用说明,如下图所示

5.1 配置管理菜单

配置管理是用于集中管理微服务中的各类配置信息的,比如为了减少开发,测试,生产等不同的环境下因为配置文件带来的麻烦,可以在这里进行分门别类的做管理。

5.1.1 配置列表

配置列表维护环境中所有的配置文件,使用很简单,直接创建即可

 对上面的配置参数做简单的补充说明:

  • Data ID命名时,建议使用具有业务通识含义的全局唯一的名称,比如以 dev,test等区分不同的环境;

  • Group,具有相同业务归属的建议使用相同的分组,避免都使用DEFAULT_GROUP;

  • 配置内容中建议不要包含敏感信息;

最佳实践

5.1.2 历史版本

通过该项,可以查看指定配置的历史变更信息,便于信息的追溯

六、nacos权限管理

使用权限管理可以更好的对配置文件的读写权限进行控制,nacos的权限体系比较简单,主要涉及到用户,角色和权限三个模块;

使用权限管理需要在application.properties配置文件中开启下面的配置项

### If turn on auth system:
nacos.core.auth.enabled=true

6.1 用户

即具体登录nacos控制台的账户,你可以在这里管理nacos的账户,如添加新的账户,删除账户等,比如使用的默认账户nacos;

6.2 角色

即操作资源的身份,某个账户要能使用某个功能,必须具备这个角色才有操作权限,你可以在这个创建一个新的角色,并为某个账户绑定这个角色;

6.3 权限

具体的权限项,比如为某个具体的角色,具体的资源授权,权限可以是读或写,或者读写,那么被角色关联的账户就具备了操作这个资源的权限;

七、nacos命名空间

命名空间这个概念相信大家并不陌生,也不是nacos的独创,命名空间是为了更好的区分微服务之间的使用边界的一种用于实现逻辑隔离的概念,有点像docker容器的概念,即你只能在自己的容器内使用,使用过apollo的同学对此应该有较深的体会,apollo在使用的时候,不同的应用之间一定要通过nacos去管理;

7.1 创建命名空间

为你的微服务创建一个新的命名空间,名称最好见名知意

创建完成后,回到配置列表,可以看到在默认的public右侧就多了order和user这两个命名空间

7.2 创建配置文件

后续如果我们需要在user微服务下创建配置文件,就可以切换到user这个命名空间下创建,就能更好的区分和维护不同命名空间的配置文件了;

八、Spring Cloud 使用 Nacos

接下来将从多个维度详细介绍下在springcloud中如何使用Nacos

8.1  前置准备

导入依赖,在工程中导入如下依赖,第一个是使用nacos的配置使用,第二个是将nacos作为配置中心时使用;

        <!--nacos-config 配置中心-自带动态刷新-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--nacos-discovery 注册中心-服务发现与注册-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

8.2  读取nacos配置

上面在某个命名空间下创建完成配置文件后,就可以在程序中进行读取了,具体使用步骤如下:

8.2.1 配置文件

使用nacos时,关于nacos的连接配置需要在一个bootstrap.yaml 中进行设置

springboot加载配置文件优先级:bootstrap.yaml > application.yaml

bootstrap.yaml 配置如下:


server:
  port: 8087

spring:
  application:
    #这里的名称和nacos中的配置文件名称保持一致
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        #指定要加载的配置文件的格式后缀名
        file-extension: yaml

application.yaml配置如下:

spring:
  profiles:
    active: dev

关于这里两个配置文件的内容为什么要这么做,官方文档给了如下说明:

 简单来说可以这么理解:

1、spring.application.name 的值为nacos配置文件的名称;

2、nacos配置文件的名称需要拼接application.yaml中的环境变量名,比如上文的:dev;

3、通过这种写法,可以在本地的配置文件中,根据环境的不同,快速切换不同的环境;

8.2.2 nacos添加一个配置文件

在默认的public命名空间下添加如下配置文件

配置内容如下:

config:
    info:
        name: nacos center

8.2.3 添加测试接口

为了测试效果,使用一个接口读取nacos的配置

@RestController
@RefreshScope
public class ConfigController {

    @Value("${config.info.name}")
    private String configName;

    @GetMapping("/get/config")
    public String getConfigName(){
        return configName;
    }

}

8.2.4 模拟测试

启动工程后,调用接口测试,发现可以正常读取到上面的配置信息

8.3  namespace与group使用

通过上文中对于namespace的讲述了解了namespace在nacos中的使用,从微服务配置管理的设计思想来说,通过namespace + group的划分,可以更加精准的管控应用归属的配置信息,真正做到比较安全的隔离,下面来具体说说不同场景下namespace + group的组合使用。

8.3.1 同一个namespace不同dataid

在上文,我们使用的是默认的namespace即public,nacos-config-client-dev.yaml 配置文件名称即应用层级的唯一名称,这里叫做 Data Id;

再创建一个新的配置文件,名为:nacos-config-client-test.yaml,配置内容如下

config:
    info:
        name: config center,test

创建完成后可以看到列表中新增了一个配置文件

修改如下配置文件

启动工程后,再次测试接口,此时读取到的就是test的配置文件中的信息

8.3.2 不同namespace的配置读取

再在user这个namespace下面也创建一个nacos-config-client-dev.yaml的配置文件

config:
    info:
        name: config center,ns user

工程中bootstrap.yaml加上namespace的配置,注意namespace的值是那一长串字符串;

 启动工程后再次读取配置,可以看到本次读取的就是新的配置文件里的信息

 8.3.3 不同group的配置读取

上文在public命名空间下没有配置分组的情况下,默认使用的都是DEFAULT_GROUP这个分组,如果希望读取自己分组下的配置怎么做呢?可以自定义一个新的分组。

这样在user这个命令空间下就多了一个分组user_test_group,并且在这个分组下,有一个nacos-config-client-test.yaml的配置文件;

修改bootstrap.yaml配置文件,添加group信息

启动工程后再次读取配置,可以看到本次读取的就是新的配置文件里的信息

8.4  nacos动态刷新配置

还记得在最早使用springcloud 的config配置中心的时候,如果某个配置文件发生了变更,程序中无法实时加载到这个最新的配置信息,而是需要配合其他的组件才能使用,而在nacos中就不必这么麻烦了;

nacos提供了@RefreshScope注解,在需要动态获取配置的类上面加上该注解就可以准实时的获取nacos中发生变更的配置信息;

在上面的接口类中,加上这个注解

@RestController
@RefreshScope
public class ConfigController {

    @Value("${config.info.name}")
    private String configName;

    @GetMapping("/get/config")
    public String getConfigName(){
        return configName;
    }

}

再最后一个测试用例中,我们去user这个命名空间下,修改一下nacos-config-client-test.yaml中的配置信息;

修改完毕后保存发布,在不重启工程的情况下,再次调用接口,可以看到最新的配置信息已经读取到;

有心的同学可能会发现,当修改了配置文件信息后,控制台中输出了如下的内容,我们猜测可能是这个@RefreshScope注解的背后存在某种机制,能够动态的感知或者说监听到nacos中的配置文件内容的变化;

 九、写在最后

本文通过大量的篇幅详细介绍了nacos的各种场景的使用,对于使用springcloud alibaba这一套微服务治理框架的同学来说,nacos可以说必须要熟练掌握,同时,可以通过阅读源码深入了解其背后的架构设计思路,对于自身也是不错的借鉴。本文源码:源码地址

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

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

相关文章

【分享NVIDIA GTC 23大会干货】加速生成式AI在生物学和医疗领域的应用

【分享NVIDIA GTC 23大会干货】加速生成式AI在生物学和医疗领域的应用1. NVIDIA医疗领域AI计算平台——NVIDIA CLARA2. NVIDIA CLARA医学影像子平台——MONAI3. NVIDIA CLARA医疗设备子平台——Holoscan4. NVIDIA基因组学解决方案Parabricks5. NVIDIA药物研发解决方案6. 个人思…

互联网医院源码|互联网医院软件体现智慧医疗的优势

现在大家看病一般都会直接在互联网医院平台上去就诊&#xff0c;每次大家需要看病时&#xff0c;可以在手机上直接去预约指定的医生&#xff0c;同城周边的所有医院都是可以去直接选择的&#xff0c;这样也可以去帮助大家节省很多的看病时间&#xff0c;在互联网医院软件中所具…

【ApiPost】实现【gRPC】调试【上手篇】

ApiPost下载地址 下载中心-Apipost-中文版接口调试与文档管理工具Apipost官方下载中心为您提供Apipost软件最新版本,其中包括Windows、Mac、Linux等多个客户端的安装包&#xff0c;Apipost下载就上Apipost.cn&#xff0c;国内专业的接口测试软件,一键生成API文档。https://www…

中核科技:科技匠心 智启未来

​  2023 年4月 13—15 日&#xff0c;2023年易派客工业品展览会、石油石化工业展览会、第七届中国石油和化工行业采购年会&#xff0c;在苏州国际博览中心胜利召开。本次展会展览面积53000平方米&#xff0c;参展企业500余家&#xff0c;汇集了中国工业制造领域的大型国企央…

Parcel 实践指南

Parcel 是一个极速零配置的 Web 应用程序打包器。它的零配置特性使得开发者可以更快速地进行项目的构建。本文将向你展示如何在项目中实践 Parcel&#xff0c;并讨论一些性能优化策略以及不同场景下的最佳实践。 总结 Parcel 是一个强大而灵活的打包工具&#xff0c;它可以让你…

【Python_Scrapy学习笔记(八)】基于Scrapy框架实现多级页面数据抓取

基于Scrapy框架实现多级页面数据抓取 前言 本文中介绍 如何基于 Scrapy 框架实现多级页面数据的抓取&#xff0c;并以抓取汽车之家二手车数据为例进行讲解。 正文 在介绍如何基于 Scrapy 框架实现多级页面数据的抓取之前&#xff0c;先介绍下 Scrapy 框架的请求对象 reques…

Linux超级强大的十六进制dump工具:XXD命令,我教你应该如何使用!

在Linux操作系统中&#xff0c;XXD是一个十六进制dump工具&#xff0c;可以将二进制文件转换为十六进制表示&#xff0c;并以可读的形式显示。XXD命令可用于显示文件内容、编辑文件等用途。本文将介绍如何在Linux中使用XXD命令。 安装XXD命令 通常情况下&#xff0c;XXD命令已…

Java面试题总结 | Java基础部分2(持续更新)

文章目录反射的优缺点BIO、AIO、NIO同步异步概念**阻塞与非阻塞****BIO****NIO****AIO**总结设计模式的好处设计模式一定是好用的吗Integer.ValueOf和new Integer的区别Integer.parseInt(s)与Integer.valueOf(s)的区别String是线程安全的吗&#xff1f;StringBuffer和StringBui…

开源GPT-4小羊驼(Vicuna)快速上手指南

小羊驼&#xff08;Vicuna)是什么 Vicuna: 一个开源的GPT&#xff0c;宣称实现了GPT-4 90%的功能。 UC伯克利学者联手CMU、斯坦福等&#xff0c;再次推出一个全新模型70亿/130亿参数的Vicuna&#xff0c;俗称「小羊驼」&#xff08;骆马&#xff09;。 并且和其他以往不同的是…

数据库管理-第六十五期 Oracle 23c新特性(20230411)

数据库管理 2023-04-11第六十五期 Oracle 23c新特性1 免费版23c目录结构2 新特性总结第六十五期 Oracle 23c新特性 上一期装了免费版23c&#xff0c;这一期根据安装的数据库&#xff0c;对Oracle 23c的部分新特性进行实验展示。 1 免费版23c目录结构 通过RPM包安装的免费版2…

静态时序分析Static Timing Analysis1——STA概述、标准工艺库、时钟、IO约束的建立

文章目录前言一、静态时序分析概述1、时序路径分类2、STA和动态仿真比较3、PVT4、不同时钟域5、建立时间、保持时间6、恢复时间、移除时间二、标准工艺库1、标准单元延时模型2、slew derate三、STA约束的建立1、时钟约束1.1 时钟定义1.2 时钟不确定性1.3 时钟延时1.4 生成时钟2…

2023年4月的编程语言排行榜,有你中意的开发语言吗?

编程世界变幻莫测&#xff0c;编程语言也是层出不穷&#xff0c;每隔一段时间就有新的风口出现。2023年的风口非人工智能莫属&#xff0c;人工智能领域中不可获取的编程语言就是Python&#xff0c;作为在算法、数据方面有独特优势的编程语言&#xff0c;从去年开始就展现了它不…

Linux03——文件系统及结构、命令

目录 一、前言 二、文件目录 三、文件系统 四、文件目录命令 五、系统信息命令 六、通讯网络命令 七、磁盘类命令 八、进程管理命令 一、前言 Linux特点是开放性遵循OSI国际标准&#xff1b;多用户每个用户有各自权限&#xff1b;多任务&#xff1b;GUI和系统调用界面&…

Java每日一练(20230411)

目录 1. 同构字符串 &#x1f31f; 2. 随机字符串 &#x1f31f; 3. 交错字符串 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 同构字符串 给定两个…

京东技术专家首推:Spring微服务架构设计,GitHub星标128K

前言 本书提供了实现大型响应式微服务的实用方法和指导原则&#xff0c;并通过示例全面 讲解如何构建微服务。本书深入介绍了Spring Boot、Spring Cloud、 Docker、Mesos和Marathon&#xff0c;还会教授如何用Spring Boot部署自治服务&#xff0c;而 无须使用重量级应用服务器…

SAP开发环境ABAP的搭建(客户端和服务器),Developer Key和AccessKey的绕过方法

目录 一.前言 二.客户端GUI安装 1.下载好SAP GUI 750 2.解压后找到SAPGUISetup.exe 3.安装 4.安装完整教程 三.服务端搭建 1.安装VmWare虚拟机 2.下载虚拟机镜像 3.打开虚拟机 4.调整内存大小 5.启动虚拟机 四.创建程序 1.创建包 2.创建程序 3.Developer Key和A…

C语言——变参函数

一、定义 一般函数的参数列表是固定的&#xff0c;所以在调用时传入的实参的个数和格式必须和实参匹配&#xff1b;在函数式中&#xff0c;不需要关心实参&#xff0c;直接调用形参即可。 变参函数&#xff0c;就是参数的个数及类型都不确定的函数&#xff0c;常见变参函数如pr…

jenkins的slave节点构建java失败

背景&#xff1a; 主节点构建没问题的&#xff0c;为了缓解压力增加了个从节点&#xff0c;但是发现同个应用分配到从节点构建时报错&#xff0c;主节点构建就正常。但是我的从节点是把主节点克隆过去的&#xff0c; 理论环境配置java——maven啥都是一模一样才是。不理解。 …

Markdown基础语法:快速入门指南

什么是Markdown Markdown是一种轻量级的标记语言&#xff0c;它的目标是让文本内容更加易读、易写和易于转换成HTML等格式。Markdown语法简单、直观&#xff0c;适合用于写作、博客、笔记、文档等场景。Markdown最初由John Gruber和Aaron Swartz于2004年创建&#xff0c;现在已…

从手动实现web开发到借助IDEA实现web开发的具体流程分析,详细介绍webapp的目录结构和web站点的欢迎页面的设置

使用Tomcat手动实现WEB开发 实现静态的web应用(没有java小程序) 第一步&#xff1a;找到CATALINA_HOME\webapps目录(Tomcat服务器要求所有的web应用都要放到webapps目录下, 这样它才能找到你的web应用) 第二步&#xff1a;在CATALINA_HOME\webapps目录下新建一个oa的子目录(…