Nacos作为配置中心


参考文章:
参考文章1,点击这里

pom

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  <version>0.2.0.RELEASE</version>
</dependency>

yml

注意:需要在Resource目录文件下写bootstrap.yml,而不是application.yml,如果写成application.yml会出现空指针异常

server:
  port: 8070
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      config:
        # 配置中心地址配置
        server-addr: 123.57.128.96:8848
        # 定义配置文件后缀为.properties, dataId=${spring.application.name}-${spring.profiles.active}.properties
        file-extension: properties
        # 定义配置中心分组:
        group: dev
      discovery:
        # 注册中心地址配置
        server-addr: 123.57.128.96:8848
  profiles:
    # 定义环境为dev
    active: dev

新建配置

在Nacos-Server中新建配置,其中Data ID它的定义规则是:${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
  • spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置。
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
    注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.prefix.{file-extension}

这里我创建Data Id 为nacos-config.yml的配置文件,其中Group为默认的DEFAULT_GROUP,配置文件的格式也相应的选择yaml,其内添加配置nacos.config=hello_nacos,如图所示

配置文件加载顺序

参考文章,点击这里
namespace(命名空间的配置)
在这里插入图片描述
下面的namespace和上图的Id实现一一对应的关系。
在这里插入图片描述

我的理解:

下面的这种Data ID文件名的命名方式是从bootstrap.yml配置文件中读写相应的值,然后按照${prefix}-${spring.profile.active}.${file-extension}这种方式进行命名的。
例子:如果bootstrap.yml中的 spring.cloud.nacos.config.prefix 为wu,那么Data ID的文件名就是wu-xxx-xx
在这里插入图片描述
2,创建配置文件名为bootstrap.yml,注意是bootstrap.xxx,而不是application或者其他。原因如

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

PS:项目启动的时候先加载 bootstrap.yml,然后再加载application.yml,所以在使用配置中心的时候,项目中使用bootstrap.yml,在其中配置一些固定不变的信息,在配置中心配置可变信息

这里的配置文件类型可以根据个人习惯选择,我这里用的时yml类型,配置内容如下

spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yml
  • spring.cloud.nacos.discovery.server-addr指定注册中心的地址,如果你不需要注册该服务,也可以去掉该项,并删除discovery依赖
  • spring.cloud.nacos.config.server-addr指定配置中心的地址
  • file-extension指定配置中心中配置文件的格式

上面的配置是为了保证服务的正常注册和配置获取,以及配置DataID的正确性

使用

package com.example.nacosconfig.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class ConfigController {

    @Value("${nacos.config}")
    private String config;

    @GetMapping("/helloConfig")
    public String helloConfig(){
        return config;
    }

}
  • 其中通过@Value注解,去读取key为nacosconfig的配置的值,并通过/getValue接口返回。
  • 加入@RefreshScope注解,可以使当前类下的配置支持动态更新,当修改Nacos平台上的配置文件的时候,可以动态的去刷新相应的值。

3.配置文件共享

假设现在有这样的一个需求:现在有两个微服务,都涉及到库存的预警值这项配置,希望能够做到统一的配置管理。所以,我们希望可以将预警值放在独立的配置文件stock.yml文件中,要达到这种效果。
参考文章,点击这里
可以采取以下两步:

第一步:在Nacos中创建Data ID=stock.yml,Group=DEFAULT_GROUP配置内容
在这里插入图片描述

第二步:在两个微服务应用中通过使用spring.cloud.nacos.config.ext-config参数来配置要加载的配置内容,比如:
在这里插入图片描述
在这里插入图片描述
共享配置可以看到,spring.cloud.nacos.config.ext-config配置是一个数组List类型。

每个配置中包含三个参数:data-id、group,refresh;data_id,group与Nacos中创建的配置相互对应,refresh参数控制这个配置文件中的内容时候支持自动刷新。

Nacos还提供了另外一个便捷的配置方式,比如下面的设置与上面使用的配置内容是等价的:

spring.cloud.nacos.config.shared-dataids=stock.yml

spring.cloud.nacos.config.refreshable-dataids=stock.yml

配置加载的优先级spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔
spring.cloud.nacos.config.refreshable-dataids参数用来定义哪些共享配置的Data Id在配置变化时,应用中可以动态刷新,多个Data Id之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新。
测试:
相应的业务代码没有什么变化,利用@Value注解获取配置值
在这里插入图片描述
在这里插入图片描述
通过请求消费端的/goods/stock和/goods/12(这个会调用生产端应用)都可以获取库存预警值
在这里插入图片描述在这里插入图片描述
加载顺序

当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。

在使用Nacos配置的时候,主要有以下三类配置:

A: 通过spring.cloud.nacos.config.shared-dataids定义的共享配置
B: 通过spring.cloud.nacos.config.ext-config[n]定义的加载配置
C: 通过内部规则(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group这几个参数)拼接出来的配置
加载的配置原则是会覆盖之前加载的配置,根据启动日志,我们观察可以看出优先级关系是:A < B < C
注意:优先级越高,就是加载的时间越靠后

总结
Nacos共享配置的两种实现方式,两种方式针对不同的场景:

1、shared-dataids方式:适合于共享配置文件与项目默认配置文件处于相同Group时
2、ext-config方式:它可以由开发者自定义要读取的共享配置文件的DataId、Group、refresh属性,这样刚好解决了shared-dataids存在的局限性。
Nacos灰度发布现在只支持IP,将来也许会增加别的灰度方式。今天就介绍到这里,谢谢!!!

需要注意的是:
shared-dataids方式:

  • 适合于共享配置文件与项目默认配置文件处于相同Group时,直接两条命令就可以搞定
  • 优点:配置方便
  • 缺点:只能在同一Group中

ext-config方式:

  • 它可以由开发者自定义要读取的共享配置文件的DataId、Group、refresh属性,这样刚好解决了shared-dataids存在的局限性。
  • 优点:可以与shared-dataids方案结合使用,用户自定义配置。灵活性强
  • 缺点:配置容易出错,要熟悉YAML语法
    可见两种方式各有长处,所以如果在开发中需要使用共享配置,大家可以是具体情况而定选择自己最合适的方案。
# 共享配置
spring.cloud.nacos.config.shared-dataids=common-log.yaml,common-redis.yaml
spring.cloud.nacos.config.refreshable-dataids=common-log.yaml

4.Nacos持久化

参考文章,点击这里
acos默认自带的是嵌入式数据库derby,在集群模式下存在一致性问题。

derby切换到Mysql
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  • 安装数据库,版本要求:5.6.5+
  • 初始化mysql数据库,数据库初始化文件:conf/nacos-mysql.sql。
  • 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos

sh startup.sh -m standalone

发布一个配置文件进行测试
在这里插入图片描述
nacos所有写嵌入式数据库的数据都写到了mysql
在这里插入图片描述
Nacos集群
在这里插入图片描述
配置集群配置文件
在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)

192.168.182.20:3333
192.168.182.20:4444
192.168.182.20:5555
192.168.182.20:8848

启动nacos
集群模式

使用内置数据源

sh startup.sh -p embedded

使用外置数据源

sh startup.sh

nginx配置
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值