nacos 配置中心

您所在的位置:网站首页 bootstrapyml配置文件 nacos 配置中心

nacos 配置中心

2023-04-07 10:06| 来源: 网络整理| 查看: 265

环境:

IDEA 2022

NACOS:2.2

nginx :1.22

CentOS7

springCloud 2021.0.5

Springboot 2.6.13

Spring-cloud-alibaba 2021.0.4.0

实现效果:

  微服务配置信息(主要是application中的内容)实现远程配置和共享配置

具体操作:

  把公共的配置统一拿到nacos配置中心包括如下配置:

  1、mysql

  

 

 

   

spring: #application: # name: cloud-payment-service # 项目名,也是注册的名字 datasource: type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型 driver-class-name: org.gjt.mm.mysql.Driver #mysql驱动包 url: jdbc:mysql://localhost:3306/hztech?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: xxxxxxl inetutils: ignored-interfaces: 'VMware Virtual Ethernet Adapter for VMnet1,VMware Virtual Ethernet Adapter for VMnet8' mybatis: mapper-locations: classpath:mapper/*.xml # 所有Entity 别名类所在包 type-aliases-package: com.hztech.entities

 

  2、druid

  

 

 

   

  3、nacos register

  

 

 

   4、系统默认的配置文件 cloud-payment-service(与服务同名)

  设置是否允许本地配置的信息不被远程配置信息覆盖  override-none:false 默认为覆盖,override-none:true 远程配置不覆盖线下配置

  注意:如下配置在客户端配置无效,只能在Nacos 服务端配置才可以

spring: cloud: config: # Nacos远程配置是否不覆盖其他属性源(文件、系统),默认为false,即覆盖其他源(文件、系统), #当allow-override:为true时才会生效 override-none: false # 是否允许Nacos远程配置被本地文件覆盖,默认为true allow-override: true # Nacos远程配置是否可以覆盖系统属性源(系统环境变量或系统属性),默认为true,即允许 override-system-properties: false

Nacos服务端配置总览:

 

 

 

  

 以下为provider微服务客户端配置

启用远程配置后,集群部署的相同的服务的不同实例,可以共享一份远程的配置信息,同时本地的pom.xml和bootstrap.yml也可以保持一致

pom.xml springclound com.hztech 1.0-SNAPSHOT 4.0.0 provider-payment8002 8 8 UTF-8 org.springframework.cloud spring-cloud-starter-bootstrap com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.mybatis.spring.boot mybatis-spring-boot-starter com.alibaba druid-spring-boot-starter mysql mysql-connector-java org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools runtime true cn.hutool hutool-all 5.8.11 compile com.hztech cloud-api-common 1.0-SNAPSHOT

 

bootstrap.yml

注意:

1、与配置中心配合使用的本地配置问件,不是 application而是 bootstrap

2、namespace:必须使用id,名称测试未通过!!!

3、数据库配置的远程配置要在其他配置的前面,否则启动报错

4、如果要使用权限管理,就需要在nacos 服务端开启了 nacos.core.auth.enable=true ,这种场景下必须配置 username和password

#服务名称 spring.application.name=cloud-payment-service #nacos 配置中心地址 此处因为搭建了nginx反向代理所以省略了端口号 直接填写nginx的访问地址 spring.cloud.nacos.config.server-addr=192.168.1.254 #命名控件必须用id #spring.cloud.nacos.config.namespace=6be08475-3019-4d2c-b22f-51676ea80fac # 扩展文件 共享配置 spring.cloud.nacos.config.shared-configs[0].data-id=datasource.yml spring.cloud.nacos.config.shared-configs[0].refresh=true spring.cloud.nacos.config.shared-configs[1].data-id=nacos.yml spring.cloud.nacos.config.shared-configs[1].refresh=true spring.cloud.nacos.config.extension-configs[0].data-id=druid.yml spring.cloud.nacos.config.extension-configs[0].refresh=true #与 nacos.core.auth.enable有关 #spring.cloud.nacos.config.username=nacos #spring.cloud.nacos.config.password=nacos #file-extension默认是propertites spring.cloud.nacos.config.file-extension=yaml #prefix=${spring.application.name} #默认是这个配置 与 ${spring.application.name} 同名 #spring.cloud.nacos.config.prefix=myconfigprefix #{spring.cloud.nacos.config.prefix}+"-"+{spring.profiles.active}+”."+{spring.cloud.nacos.config.file-extension} #spring.profiles.active=dev

 

 

 测试dev中的远程配置情况

 

 

 

application.yml

在启用远程配置如果,这个文件中可以只保存一个端口号就好

不同的应用可以设置不同的port就可以了。

 

server: port: 8002

 

consumer 微服务 88

POM.xml

springclound com.hztech 1.0-SNAPSHOT 4.0.0 customer-order80 8 8 UTF-8 org.springframework.cloud spring-cloud-starter-bootstrap com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-netflix-ribbon org.springframework.cloud spring-cloud-loadbalancer org.springframework.cloud spring-cloud-starter-openfeign org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok org.springframework.boot spring-boot-starter-test test com.hztech cloud-api-common 1.0-SNAPSHOT

 

bootstrap.yml 使用远程配置 ,只需要nacso 配置, spring.application.name=payment-order spring.cloud.nacos.config.server-addr=192.168.1.254 #命名控件必须用id #spring.cloud.nacos.config.namespace=6be08475-3019-4d2c-b22f-51676ea80fac # 扩展文件 共享配置 spring.cloud.nacos.config.shared-configs[0].data-id=nacos.yml spring.cloud.nacos.config.shared-configs[0].refresh=true #spring.cloud.nacos.config.username=nacos #spring.cloud.nacos.config.password=nacos #file-extension默认是propertites spring.cloud.nacos.config.file-extension=yaml #prefix=${spring.application.name} #默认是这个配置 与 ${spring.application.name} 同名 #spring.cloud.nacos.config.prefix=myconfigprefix #{spring.cloud.nacos.config.prefix}+"-"+{spring.profiles.active}+”."+{spring.cloud.nacos.config.file-extension} #spring.profiles.active=dev

application.yml

只配置端口

server: port: 88

项目结构

 

 

nacos 服务列表

 

 

测试过程中发现nacos服务端控制台有两个BUG;

1、微服务客户端运行期间,客户端IP 地址发生改变,nacos 服务端注册信息未更新---影响consumer 查询和调用服务--

应对方法,重启客户端微服务

2、服务注册信息不显示,任何记录,刷新无效,-------不影响consumer对微服务的调用

应对方法:退出nacos 控制台,重新进入

配置文件优先级

 由高到低依此为:

1、profile2、默认的与服务同名的配置文件3、extension-configs(下标越大优先级越高)4、shared-configs(下标越大优先级越高)

另外:线上配置优先级高于本地配置(同属性覆盖本地)

 

官方资料

启动配置管理

启动了 Nacos server 后,您就可以参考以下示例代码,为您的 Spring Cloud 应用启动 Nacos 配置管理服务了。完整示例代码请参考:nacos-spring-cloud-config-example

添加依赖: com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config ${latest.version}

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

更多版本对应关系参考:版本说明 Wiki

在 bootstrap.properties 中配置 Nacos server 的地址和应用名 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.application.name=example

 

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

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

${prefix}-${spring.profiles.active}.${file-extension} prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。 spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension} file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新: @RestController @RequestMapping("/config") @RefreshScope public class ConfigController { @Value("${useLocalCache:false}") private boolean useLocalCache; @RequestMapping("/get") public boolean get() { return useLocalCache; } } 首先通过调用 Nacos Open API 向 Nacos Server 发布配置:dataId 为example.properties,内容为useLocalCache=true curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

运行 NacosConfigApplication,调用 curl http://localhost:8080/config/get,返回内容是 true。

再次调用 Nacos Open API 向 Nacos server 发布配置:dataId 为example.properties,内容为useLocalCache=false

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache=false" 再次访问 http://localhost:8080/config/get,此时返回内容为false,说明程序中的useLocalCache值已经被动态更新了。

 

官方网站

  https://nacos.io

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3