springcloud-alibaba(三.nacos-配置中心)

为什么会有配置中心?

项目里一般都有配置文件(如application.yaml), 在项目中定义配置文件,最大的缺陷:
如果在生产环境正在运行的时候突然需要修改配置文件的话,必须重启我们的服务器。(生产环境中是不能使用热部署的)

这时候就有了配置中心:

使用专门的服务器统一存放管理我们整个的微服务的配置文件, 能够完全动态实现对我们配置文件修改、新增,是不需要重启我们的服务器。

分布式框架有

  • SpringConfig, 第一代cloud使用,没有界面
  • Nacos, 第二代cloud使用,轻量级
  • 携程阿波罗, 专门用于配置中心, 重量级

Nacos的配置中心, 注册中心都部署在同一个应用上

分布式配置中心实现原理:

  1. 本地应用读取我们云端分布式配置中心文件(第一次会建立长连接)
  2. 本地应用读取到配置文件之后,本地jvm和硬盘中都会缓存一份
  3. 本地应用与分布式配置中心服务器端直保持长连接
  4. 当我们的配置文件发生变化 (通过MD5|版本号实现区分),将变化结果通知给我们的本地应
    用, 及时的刷新我们的配置文件

在这里插入图片描述

部署Nacos配置中心

启动nacos服务器, nacos需要提前配置jdk1.8以上环境(可能需要重启), 然后http://127.0.0.1:8848进入nacos管理页面

maven依赖

版本和spring-cloud-alibaba保持一致就行

<!--    nacos配置中心-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      <version>${spring.cloud.alibaba.version}</version>
    </dependency>

yaml

server:
  port: 8002

spring:
  application:
    name: nacos-provider
    
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848
      # nacos服务器的地址

      config:
        file-extension: properties
        # 扩展文件类型, nacos中只能为其扩展此类文件

me:
  # 自定义,用来测试
  name: 8081
  age: 20

给主程序添加注解**@RefreshScope**, 用于Nacos动态刷新

@RefreshScope // Nacos动态刷新
@SpringBootApplication
public class NacosProvider2{
    public static void main(String[] args){
        SpringApplication.run(NacosProvider2.class, args);
    }
}

使用Nacos配置中心

进入配置管理–配置列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cbOetGnA-1644029296391)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220121164233810.png)]

点击右上角的加号, 新增一项配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ewbKnxg4-1644029296392)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220121164838032.png)]

  1. DataId是服务名称-代码阶段.配置文件类型, 如nacos-provider-dev.yaml

    注意文件名称官网规定为: s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}. ${file-extension:properties}

    当yaml文件中没有指定profile时, 可以省略为**${spring.application.name}. ${file-extension:properties}**

    ${file-extension:properties} 表示 file-extension默认类型为properties

  2. 选择配置格式

  3. 编写配置的内容, 选的是什么格式,就如何编写

    一个小坑: nacos只支持yaml不支持yml, 并且两者不能混合使用

  4. 点击发布, 该服务对应的配置文件内容就更新了

    用nacos发布一项配置相当于在nacos中重写了一个持久性的yaml或者properties文件

Nacos分类部署

nacos对一项配置的管理分为多层, 这也是它相对于springconfig的独特之处

层次英文解释作用默认值
命名空间namespace用来区分部署环境: 开发, 生产, 测试public
groupDEFAULT_GROUP
服务service功能相关联的一群微服务
集群(使用相同的DataId)cluster用来装作用相同的多个微服务DEFAULT

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5FLtaol-1644029296392)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220121194955058.png)]

分类概述图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1DviSoJ5-1644029296392)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220121194741502.png)]

同一配置文件,指定不同环境

修改bootstrap.yaml文件, 指定激活的部署环境

spring:
  profiles:
    active: dev # 指定是什么环境下的部署

bootstrap.yaml比application.yaml文件优先级高, 所以可以用来指定激活环境

然后在nacos中添加一项配置, DataId是nacos-provider-dev.properties(nacos-provider是服务名), 表示是dev环境下的, 这时这两者就相对应了

同理如果配置文件改成test环境:

spring:
  profiles:
    active: test # 指定是什么环境下的部署

可以再添加一项配置: DataId是nacos-provider-test.properties

这样就实现了统一配置文件的不同部署环境的轻松切换

修改默认命名空间

这个就简单很多了, 先在bootstrap.yaml文件中修改默认命名空间:

spring:
  cloud:
    nacos:
      config:
        namespace: dev

注意: 这个配置(包括后面的配置组,DataId)只能在bootstrap中修改才有效

再在nacos中的命名空间中新建一个命名中心dev(默认是public), 再在dev下新建它的配置, DataId为nacos-provider.properties

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tKqDEIyq-1644029296393)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220121220054567.png)]

修改默认组

也是一样, 先在bootstrap.yaml文件中修改默认组:

spring:
  cloud:
    nacos:
      config:
        group: DEV_GROUP

再在nacos中新建一项它的配置,DataId为nacos-provider.properties, Group为DEV_GROUP

修改默认DataId

默认的DataId的格式是 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}. ${file-extension:properties}

但也可以在bootstrap文件中指定:

# config external configuration
# 1. Data Id is in the default group of DEFAULT_GROUP, and dynamic refresh of configurations is not supported.
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties

# 2. Data Id is not in the default group, and dynamic refresh of configurations is not supported.
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP

# 3. Data Id is not in the default group and dynamic referesh of configurations is supported.
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
  • 可以看到不仅可以改默认DataId, 还可以配置多个DataId(事实上没必要)
  • ext-config[n]中的越高, 这个DataId的优先级越高(nacos中配置不同DataId的配置项可能相互冲突)

Nacos持久化部署(Windows下)

  • Nacos支持三种部署模式:

    • 单机模式 - 用于测试和单机试用。
    • 集群模式 - 用于生产环境,确保高可用。
    • 多集群模式 - 用于多数据中心场景。
  • Nacos也要有集群?

    如果只有一台Nacos服务器(http://127.0.0.1:8848), 性能很差, 容易出现单点故障

  • 持久化部署?

    默认Nacos使用嵌入式数据库实现数据的存储。所以,虽然可以基本实现持久化(重启Nacos服务器或者主机都能持久化), 但是如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

deployDnsVipMode.jpg

Nacos配置Mysql数据库

单机模式(Windows下)
  1. 先在数据库中新建nacos_config(名称不能更改)数据库, 然后在nacos目录下找到conf/nacos-mysql.sql文件, 执行该脚本文件, 会生成nacos需要的数据表

  2. 找到conf/applicaion.properties文件,添加以下配置:

    spring.datasource.platform=mysql
    
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&serverTimezone=UTC&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=root
    db.password=root
    

    mysql8.0之后的版本 需要加上时区的配置: serverTimezone=UTC

  3. 会发现之前在嵌入式数据库中配置的内容都不见了, 这时发布一项配置,会在数据库nacos_config中的config_info表中找到对应的行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值