Alibaba Nacos 快速入门指南

Alibaba Nacos 快速入门

概览

  1. Nacos 安装,基础概念熟悉
  2. Nacos 注册中心使用,配置中心的使用
  3. 结合 @RefreshScope 实现配置文件的动态刷新

Nacos 是什么?

https://nacos.io/zh-cn/docs/what-is-nacos.html

  • 官方介绍

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

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

  • 核心特点: 既可以是注册中心也可以是配置中心

  • Nacos 有几个基础概念

    • namespace 命名空间
    • Group 配置分组
    • DataID 具体的配置文件名称,例如: application-dev.yml

    一般推荐使用namespace来区分不同的项目或环境。不同 namespace 或者不同 Group 之间的配置与服务都是隔离的。

怎么用?

  • 文档与代码

    Nacos官方Git地址:https://github.com/alibaba/nacos

    Nacos官方文档地址:https://nacos.io/zh-cn/docs/

2.1 快速开始 - 安装 Nacos Server

https://nacos.io/zh-cn/docs/quick-start.html

下载源码或者安装包

可以通过源码和发行包两种方式来获取 Nacos。

  • 从 Github 上下载源码方式

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
    ls -al distribution/target/
    
    // change the $version to your actual path
    cd distribution/target/nacos-server-$version/nacos/bin
    
  • 下载编译后的压缩包方式

    • 您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

      unzip nacos-server- v e r s i o n . z i p 或 者 t a r − x v f n a c o s − s e r v e r − version.zip 或者 tar -xvf nacos-server- version.ziptarxvfnacosserverversion.tar.gz
      cd nacos/bin

启动服务器
  • Linux/Unix/Mac
    启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone

  • 如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

    bash startup.sh -m standalone

  • Tips:

    1. 如果想修改JVM参数,那么直接修改 startup.sh 文件即可。
    2. 如果想修改 Nacos 的端口: 安装目录: /nacos/conf/application.properties 文件中修改即可
进入控制台
  • http://127.0.0.1:8848/nacos/index.html

  • 默认的用户名密码为: nacos/nacos

2.2 在 Spring Cloud 中使用 Nacos

  1. 使用Nacos配置中心

    1. 客户端依赖

      1. parent.xml - 采用公共版本依赖管理的方式

         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        
        <dependencyManagement>
        	<dependencies>
        
        		<!--spring cloud alibaba-->
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.0.2.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
        
        	<dependencies>
        
        <dependencyManagement>
        
      2. my-demo.xml

         <!--配置中心客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        
      • 注意: 关于 SpringCloudAlibaba 跟 SpringCloud 跟 SpringBoot 的版本是有对照关系的

        https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

    2. 首先必须配置下面这两个配置项

      spring.application.name=nacos-demo
      # Nacos 服务器的地址和端口
      spring.cloud.nacos.config.server-addr=127.0.0.1:8848
      
      • 说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

        • 在 Nacos Spring Cloud 中,dataId 的完整格式如下:

          p r e f i x − {prefix}- prefix{spring.profile.active}.${file-extension}

          • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。

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

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

        • 以上面的例两行配置为例: 此时将会加载 nacos 中 默认(public) 命名空间下的, DEFAULT_GROUP 分组下的 DataID 为 nacos-demo.properties 文件。

    3. Nacos 默认支持动态配置更新功能

      • 可以使用 @RefreshScope 来使用动态刷新的配置项

        • FilterIgnorePropertiesConfig

          @Data
          @Configuration
          @RefreshScope
          @ConditionalOnExpression("!'${ignore}'.isEmpty()")
          @ConfigurationProperties(prefix = "ignore")
          public class FilterIgnorePropertiesConfig {
          	/**
          	 * 放行url,放行的url不再被安全框架拦截
          	 */
          	private List<String> urls = new ArrayList<>();
          }
          
        • application.yaml

          # 直接放行URL
          ignore:
            urls:
              - /actuator/
              - /auth/login
          
        • 此时在Nacos控制台,修改 application.yaml 中对应的配置项后,点击发布按钮,客户端本地的配置就会被刷新。

    • 注意: 配置文件的优先级

      • Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

        A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置

        B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置

        C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

        当三种方式共同使用时,他们的一个优先级关系是:A < B < C

  2. 使用Nacos注册中心

    1. 依赖配置

      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
    2. 启动一个 Provider 应用

      1. 在 bootstrap.properties 中或者 application.properties 中配置

        server.port=8081
        spring.application.name=nacos-producer
        
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
        
      2. 应用程序启动类添加 @EnableDiscoveryClient 注解。

        @SpringBootApplication
        @EnableDiscoveryClient
        public class NacosProviderDemoApplication {
        
            public static void main(String[] args) {
                SpringApplication.run(NacosProducerDemoApplication.class, args);
            }
        
            @RestController
            public class EchoController {
                @GetMapping(value = "/echo/{string}")
                public String echo(@PathVariable String string) {
                    return "Hello Nacos Discovery " + string;
                }
            }
        }
        
      3. 启动后,就可以在 Nacos 控制台上看到这个服务了

  • 示例-客户端配置Nacos注册中心与配置中心

    • pom.xml

      <!--注册中心客户端-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <!--配置中心客户端-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      
    • bootstrap.yml

      server:
        port: 7002
      
      spring:
        application:
          name: @artifactId@
        cloud:
          nacos:
            discovery:
              server-addr: 127.0.0.1:8848
              namespace: sms-dev
              # 设置 nacos client 使用这个 ip 注册到 nacos server , 若不配置则会自动探测。
      	    #ip: 192.160.22.22
      
            config:
              server-addr: ${spring.cloud.nacos.discovery.server-addr}
              file-extension: yaml
              namespace: sms-dev
              group: DEFAULT_GROUP
              shared-configs:
                - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
                  group: @nacos.group@
                  refresh: false
        profiles:
          active: @profiles.active@
      

常见问题

  1. 导入配置时提示: “导入失败! 未读取到合法数据,请检查导入的数据文件“

    https://blog.csdn.net/UserFrank/article/details/112767028

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值