nacos安装及使用

  • nacos安装
    • 单机安装
    • 集群安装
  • nacos项目中使用
    • 创建项目
    • 项目中引入nacos依赖包
    • 增加logback日志记录
    • 配置nacos注册中心地址
    • 启动类增加@EnableDiscoveryClient注册服务启动注解
    • 创建一个控制类
    • nacos服务配置属性
    • 测试属性是否生效
    • 通过接口访问测试属性动态修改
    • 测试通过@ConfigurationProperties注解注入属性值
  • 分环境打包属性配置
  • 自定义命名空间
    • nacos注册中心命名空间使用
    • config配置中心命名空间使用
  • 自定义 Group 的配置
  • 自定义扩展的 Data Id 配置
    • 项目中多个Dataid使用
      • 修改配置属性前
      • 修改属性配置后

参考官网:
https://nacos.io/zh-cn/docs/quick-start.html

配置文档:
https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

服务注册:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

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

nacos下载:
https://github.com/alibaba/nacos/releases

官网demo:
https://github.com/nacos-group/nacos-examples.git

nacos安装

参考上一篇《Nacos注册服务安装》
https://starsky.blog.csdn.net/article/details/111155986

nacos下载:
https://github.com/alibaba/nacos/releases

这里我下载最新版nacos-server-1.4.0.zip,根据个人喜好下载不同版本,zip为windows版本,tar.gz为linux安装版.

单机安装

具体安装步骤参考 nacos官网 https://nacos.io/zh-cn/docs/quick-start.html

1.预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+;下载 & 配置。
Maven 3.2.x+;下载 & 配置。
2.下载源码或者安装包
你可以通过源码和发行包两种方式来获取 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 v e r s i o n t o y o u r a c t u a l p a t h c d d i s t r i b u t i o n / t a r g e t / n a c o s − s e r v e r − version to your actual path cd distribution/target/nacos-server- versiontoyouractualpathcddistribution/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.zip或者tar−xvfnacos−server−version.tar.gz
cd nacos/bin
3.启动服务器
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

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

bash startup.sh -m standalone

Windows
启动命令(standalone代表着单机模式运行,非集群模式):

cmd startup.cmd -m standalone

4.服务注册&发现和配置管理
服务注册
curl -X POST ‘http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080’

服务发现
curl -X GET ‘http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName’

发布配置
curl -X POST “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld”

获取配置
curl -X GET “http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test”

5.关闭服务器
Linux/Unix/Mac
sh shutdown.sh

Windows
cmd shutdown.cmd

或者双击shutdown.cmd运行文件。

集群安装

单机模式,使用文件进行存储,这种方式集群导致文件数据不一致问题,这里我们使用mysql作为nacos保存配置相关内容。
这里以window为例,liunx同理, 首先需要安装mysql, mysql版本5.6+, 具体mysql安装到mysql官网下载( https://dev.mysql.com/downloads/windows/installer/5.7.html ),
1、进入nacos解压缩文件config目录,复制 application.properties.example 修改为 application.properties ,修改文件内容:

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:、
## mysql数量,如果是集群,则数量为集群数
db.num=1### Connect URL of DB:
## 数据库链接配置,如果是集群,则 按照集群数量进行配置多个链接
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
## mysql登陆用户、密码
db.user=root
db.password=root

2、复制cluster.conf.example 修改为cluster.conf,修改文件内容,增加集群机器ip地址

#2020-11-27T10:51:23.825
localhost:8847


配置完成后,进入bin目录分别启动nacos server 服务,

3、修改客户端服务 bootstrap.properties 或者bootstrap.yml 文件中修改nacos server的IP地址为机器ip地址

        #注册服务地址,ip地址:端口,集群配置时,多个IP地址用逗号分隔spring.cloud.nacos.discovery.server-addr: localhost:8848#配置服务地址,ip地址:端口,集群配置时,多个IP地址用逗号分隔spring.cloud.nacos.config.server-addr: localhost:8848

4、启动客户端服务进行测试。

nacos项目中使用

近期项目需要用到nacos,故到官网学习了解,本次我将项目中如何引用及配置安装步骤,逐步详细介绍,方便大家一起交流学习。

首先需要了解项目中使用springboot、springcloud版本,因为nacos版本与springcloud需要一一对应,可以到官网查看。
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

这里我已自己项目为例,我们项目使用springboot版本为 2.0.7.RELEASE, springcloud版本为Finchley.SR2, 故nacos版本选择2.0.3.RELEASE。
使用方法参考官网:https://nacos.io/zh-cn/docs/quick-start.html

创建项目

项目中引入nacos依赖包

参考文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

在项目pom.xml文件中引入nacos依赖包。

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version>
</parent>
<groupId>com.goo</groupId>
<artifactId>daison-thirdplatform</artifactId>
<version>1.0.0.0</version>
<packaging>jar</packaging>
<name>daison-thirdplatform</name>
<description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring.boot.version>2.0.7</spring.boot.version><spring.boot.admin.version>2.0.3</spring.boot.admin.version><spring.cloud.version>Finchley.SR2</spring.cloud.version><spring.cloud.alibaba.version>2.0.3.RELEASE</spring.cloud.alibaba.version><!--自定义组件--><daison-cloud.version>1.0.0.0</daison-cloud.version><daison-commons.version>1.0.0.0</daison-commons.version><daison-business.version>1.0.0.0</daison-business.version><swagger.version>2.8.0</swagger.version><docker.plugin.version>1.1.1</docker.plugin.version><maven-jar-plugin.version>3.1.1</maven-jar-plugin.version><junit.version>4.12</junit.version><lombok.version>1.18.12</lombok.version><dom4j.version>1.6.1</dom4j.version><commons-codec.version>1.11</commons-codec.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!--spring监控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><!--rabbitmq--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--eureak 客户端--><!--   <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>--><!--alibaba 注册中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>${spring.cloud.alibaba.version}</version></dependency><!--alibaba 配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>${spring.cloud.alibaba.version}</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId></dependency><!--远程调用负载--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId><!--  <version>${spring-cloud-netflix.version}</version>--></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--admin 监控--><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>${spring.boot.admin.version}</version></dependency><!--接口文档--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version></dependency><!--自定义组件 --><dependency><groupId>com.goo</groupId><artifactId>daison-commons-tools</artifactId><version>${daison-commons.version}</version></dependency><dependency><groupId>com.goo</groupId><artifactId>daison-commons-rabbitmq</artifactId><version>${daison-commons.version}</version></dependency><!--mybatis数据库操作<dependency><groupId>com.goo</groupId><artifactId>daison-commons-mybatis</artifactId><version>${daison-commons.version}</version></dependency>--><!--自定义组件--><dependency><groupId>com.goo</groupId><artifactId>daison-model</artifactId><version>${daison-business.version}</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/dom4j/dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>${dom4j.version}</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>${commons-codec.version}</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--ali注册中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>daison-thirdplatform</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build>
</project>

增加logback日志记录

在项目resouce目录下增加logback-spring.xml 日志记录文档,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true"><springProperty scope="context" name="logLevel" source="logging.level.root"/><springProperty scope="context" name="logPath" source="logging.path"/><springProperty scope="context" name="fileName" source="spring.application.name"/><springProperty scope="context" name="serverPort" source="server.port"/><!--0. 日志格式和颜色渲染 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><!-- 彩色日志格式 --><property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(${fileName:- }) %clr(localhost) %clr(${serverPort:- }) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!--配置日志输出路径(测试配置)-->
<!--<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />&lt;!&ndash;配置日志输出路径(测试配置)&ndash;&gt;
--><!-- Console output --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}<!-- %date  %-4level  ${PID:- } [%20thread]  %logger{50} :  %msg%n--><!--[%date] [%-4level] [%line] [%thread] [%logger{50}.%method] - %msg%n--></pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></appender><!-- DEBUG output --><appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${fileName}-debug.log</file><append>true</append><encoder><pattern>${CONSOLE_LOG_PATTERN}<!--%date  %-4level ${PID:- } [%10thread]  %logger{50}  :  %msg%n--></pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level></filter><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志归档 --><fileNamePattern>${logPath}/${fileName}-debug-%d{yyyyMMdd}.%i.log.zip</fileNamePattern><!--单个日志文件最大值,达到之后就进行切割--><maxFileSize>100MB</maxFileSize><!--:日志文件最多保留的天数,也就是过期时间--><maxHistory>15</maxHistory><!-- 日志文件总体的最大值,达到之后就不再产生日志 --><totalSizeCap>3GB</totalSizeCap><!--启动项目时是否删除归档的历史日志文件--><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><!-- 此日志文档只记录debug级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>debug</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- WARN output --><appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${fileName}-warn.log</file><append>true</append><encoder><pattern>${CONSOLE_LOG_PATTERN}<!--[%date][%-4level][%line][%thread]logId:[%X{logId}]traceId:[%X{traceId}]call[%logger][%method]=> %msg%n--><!--%date  %-4level ${PID:- } [%10thread]  %logger{50}  :  %msg%n--></pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志归档 --><fileNamePattern>${logPath}/${fileName}-warn-%d{yyyyMMdd}.%i.log.zip</fileNamePattern><!--单个日志文件最大值,达到之后就进行切割--><maxFileSize>100MB</maxFileSize><!--:日志文件最多保留的天数,也就是过期时间--><maxHistory>15</maxHistory><!-- 日志文件总体的最大值,达到之后就不再产生日志 --><totalSizeCap>3GB</totalSizeCap><!--启动项目时是否删除归档的历史日志文件--><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><!-- 此日志文档只记录debug级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- INFO output --><appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${fileName}-info.log</file><append>true</append><!--日志文档输出格式--><encoder><pattern>${CONSOLE_LOG_PATTERN}<!-- %date  %-4level ${PID:- } [%10thread]  %logger{50}  :  %msg%n--></pattern><charset>UTF-8</charset></encoder><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志归档 --><fileNamePattern>${logPath}/${fileName}-info-%d{yyyyMMdd}.%i.log.zip</fileNamePattern><!--单个日志文件最大值,达到之后就进行切割--><maxFileSize>100MB</maxFileSize><!--:日志文件最多保留的天数,也就是过期时间--><maxHistory>15</maxHistory><!-- 日志文件总体的最大值,达到之后就不再产生日志 --><totalSizeCap>3GB</totalSizeCap><!--启动项目时是否删除归档的历史日志文件--><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><!-- 此日志文档只记录debug级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>info</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- DEBUG output --><appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${logPath}/${fileName}-error.log</file><append>true</append><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level></filter><!-- 日志记录器的滚动策略,按日期,按大小记录 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志归档 --><fileNamePattern>${logPath}/${fileName}-error-%d{yyyyMMdd}.%i.log.zip</fileNamePattern><!--单个日志文件最大值,达到之后就进行切割--><maxFileSize>100MB</maxFileSize><!--:日志文件最多保留的天数,也就是过期时间--><maxHistory>15</maxHistory><!-- 日志文件总体的最大值,达到之后就不再产生日志 --><totalSizeCap>3GB</totalSizeCap><!--启动项目时是否删除归档的历史日志文件--><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><!-- 此日志文档只记录debug级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>error</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--logstash地址,从application.properties中获取<springProperty scope="context" name="LOGSTASH_ADDRESS" source="logstash.address"/>--><!--elk 日志--><appender name="ELASTIC" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender"><url>http://192.168.0.87:9200/_bulk</url><index>logs-server-%date{yyyy.MM.dd}</index><type>log</type><includeMdc>true</includeMdc><!-- <authentication class="com.internetitem.logback.elasticsearch.config.BasicAuthentication" />--><properties><property><name>app_name</name><value>daison-server</value></property><property><name>host</name><value>${HOSTNAME}</value><allowEmpty>false</allowEmpty></property><property><name>level</name><value>%level</value></property><property><name>thread</name><value>%thread</value></property><property><name>stacktrace</name><value>%ex</value></property><property><name>logger</name><value>%logger</value></property><!--            <property>--><!--                <name>run_timestamp</name>--><!--                <value>%X{run_timestamp}</value>--><!--            </property>--><!--            <property>--><!--                <name>marker</name>--><!--                <value>%marker</value>--><!--            </property>--></properties><headers><header><name>Content-Type</name><value>application/json</value></header></headers></appender><!--level:用来设置打印级别(日志级别)大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF--><!--还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别,如果未设置此属性,那么当前loger将会继承上级的级别--><!-- 开发、测试环境:输出到文档 --><springProfile name="dev,test,release"><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="DEBUG" /><appender-ref ref="WARN" /><appender-ref ref="INFO" /><appender-ref ref="ERROR" /><!--<appender-ref ref="ELASTIC" />--></root></springProfile><springProfile name="prod"><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="DEBUG" /><appender-ref ref="WARN" /><appender-ref ref="INFO" /><appender-ref ref="ERROR" /><!--<appender-ref ref="ELASTIC" />--></root></springProfile>
</configuration>

配置nacos注册中心地址

nacos注册属性:

config配置中心属性:

在resource目录创建bootstrap.yml或者 bootstrap.properties文件,配置nacos、config配置管理相关信息

server:port: 8093servlet:#设置项目访问路径,http://localhost:8093/thirdplatform/swagger-ui.htmlcontext-path: /demo
spring:application:#  服务名称及 注册服务dataIDname: springcloud-nacos#  # 环境 dev|prod|test|releaseprofiles:active: prod#注册中心cloud:
#    该项配置用于指定首选IP,当有多个网卡时,指定该IP地址后(支持正则),
#    客户端在选择IP时就会选择符合preferredNetworks配置的IP地址进行注册
#    inetutils:
#      #忽略指定正则匹配的网卡的配置,我这里配置了VM虚拟机和Docker的
#      ignoredInterfaces:
#        - 'VMware.*'
#        - 'Hyper-V.*'
#      #指定默认IP,可以使IP段
#      preferred-networks:
#        - 47.107
#      use-only-site-local-interfaces: truenacos:#注册中心,具体属性查看 NacosDiscoveryPropertiesdiscovery:
#        Nacos也可以配置自己的首选IP以及网卡选择,配置自己的首选网卡
#        networkInterface:#配置自己的首选IP,优先级最高
#        ip: 47.107.186.110
#        #默认情况下不用配置,会自动探测
#        port: 8848##Nacos Server 启动监听的ip地址和端口,,集群配置时,多个IP地址用逗号分隔server-addr: daison:8848
#        server-addr: 47.119.120.197:8848
#        server-addr: localhost:8848# #给当前的服务命名,默认值${spring.application.name:}service: ${spring.application.name}#分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP#命名空间,默认值public
#        namespace: e835f88b-092f-48a7-a786-62979c25c814
#        prod环境namespace: adfeb13b-291a-4154-ac97-b8526dcd8ca5#test环境
#        namespace: 72e282dd-b09a-403e-a6a0-d3eda245426b#release环境
#        namespace: 50df6a09-0fd5-44ed-9b3b-1f865e6d12b2#默认使用nacos注册中心,如果不想使用 Nacos 作为您的服务注册与发现,可以将值设置为 falseenabled: true
#        # 当要上阿里云时,阿里云上面的一个云账号名
#        access-key:
#        # 当要上阿里云时,阿里云上面的一个云账号密码
#        secret-key:
#        #使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
#        metadata:
#        # 日志文件名
#        log-name:
#        # 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
#        endpoint:#配置中心服务 spring.cloud.nacos.config.server-addr=127.0.0.1:8848#需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。config:# 相同配置,本地优先
#        override-none: true
#        allow-override: true
#        override-system-properties: false#是否自动刷新属性,默认是true,可以通过设置 false 来完全关闭enabled: true#注册服务地址,ip地址:端口,集群配置时,多个IP地址用逗号分隔server-addr: ${spring.cloud.nacos.discovery.server-addr}
#        server-addr: ${spring.cloud.nacos.discovery.ip}:${spring.cloud.nacos.discovery.port}#prefix 默认为 spring.application.name 的值prefix: ${spring.application.name}#file-exetension 为配置内容的数据格式只支持 properties 和 yaml 类型file-extension: yaml#自动刷新配置refresh-enabled: true#分组,默认值DEFAULT_GROUPgroup: ${spring.cloud.nacos.discovery.group}#命名空间,默认值publicnamespace: ${spring.cloud.nacos.discovery.namespace}#文件扩展名既可支持 properties,也可以支持 yaml/yml。#配置文件信息查看: http://localhost:8848/nacos/v1/cs/configs?dataId=spring-demo-dev.yaml&group=DEFAULT_GROUP#ext-config[1]:#data-id: ${spring.application.name}-${spring.profiles.active}.yaml#group: DEFAULT_GROUP#refresh: true#最新版本使用以下方式进行配置文件加载,其他方式已经失效extension-configs[0]:data-id: daison-common-${spring.profiles.active}.yamlgroup: ${spring.cloud.nacos.discovery.group}
#          是否自动刷新,默认不刷新refresh: ${spring.cloud.nacos.config.refresh-enabled}extension-configs[1]:data-id: ${spring.application.name}-${spring.profiles.active}.yamlgroup: ${spring.cloud.nacos.discovery.group}refresh: ${spring.cloud.nacos.config.refresh-enabled}# 是否集成Ribbon 默认为true
ribbon.nacos.enabled: true#log config
logging:
#  日志文件输出目录path: /home/daison/admin/logs/${spring.application.name}
#  日志定义文件config: classpath:logback-spring.xml
#  输出日志级别level:#com.listenrobot.common.http.filter.HttpLoggingFilter: DEBUGorg.springframework.data.mongodb.core: DEBUGjava.sql.PreparedStatement: DEBUGjava.sql.Statement: DEBUGjava.sql.Connection: DEBUGcom.goo: DEBUG

注意:这里使用bootstrap.yml或者bootstrap.properties文件,其他文件经过测试,属性不能注入,动态属性改变调用接口不生效。

服务的 EndPoint
spring-cloud-starter-alibaba-nacos-discovery 在实现的时候提供了一个EndPoint,EndPoint的访问地址为 http://ip:port/项目名/actuator/nacos-discovery。 EndPoint 的信息主要提供了两类:

1、subscribe: 显示了当前有哪些服务订阅者
2、NacosDiscoveryProperties: 显示了当前服务实例关于 Nacos 的基础配置

我们这里通过以下访问:
http://localhost:8087/thridpaltform/actuator/nacos-discovery

启动类增加@EnableDiscoveryClient注册服务启动注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableDiscoveryClient
//@EnableFeignClients
//@EnableScheduling
public class ThirdpaltformApplication {public static void main(String[] args) {SpringApplication.run(ThirdpaltformApplication.class, args);}
}

创建一个控制类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/config")
@RefreshScope #自动刷新注解
public class ConfigController {@Value("${useLocalCache:false}")private boolean useLocalCache;@RequestMapping("/get")public boolean get() {return useLocalCache;}
}

nacos服务配置属性

登陆nacos后,在配置管理中,新增属性配置,我这里使用dev开发环境,配置属useLocalCache:false

配置成功后,可以点击详情查看或者通过config自带接口查看。
http://localhost:8848/nacos/v1/cs/configs?dataId=daison-thridpaltform-dev.yaml&group=DEFAULT_GROUP

这里的dataId 及文件名,group为文件分组,默认是DEFAULT_GROUP。

测试属性是否生效

nacos注册管理,现在没有服务注册。

启动服务:

可以通过日志看到,服务已经启动并注册nacos成功,并且监听daison-thridpaltform-dev.yaml 文件,当该文件修改后,服务会接收到修改通知。

可以看到服务启动后,nacos中已经注册。

下面我们测试修改属性daison-thridpaltform-dev.yaml ,查看服务是否监听到属性修改。
这里我清空服务控制台日志进行修改属性观察。

修改属性,在配置管理页面编辑修改,我们把这里属性useLocalCache: true 修改 useLocalCache: false 发布成功后观察服务控制台。

属性修改后,服务日志:


通过以上操作,可以看到,属性动态修改了,下面我们通过访问方法测试。

通过接口访问测试属性动态修改

我们通过访问上面定义的ConfigController 控制类接口测试,接口地址:
http://localhost:8087/thridpaltform/config/get

访问前属性配置:

接口访问查看属性:

修改属性后测试:

访问接口:

通过动态修改属性,调用接口测试,可以看到,属性修改后,后端服务访问时最新更改属性,表示配置属性已经生效。

测试通过@ConfigurationProperties注解注入属性值

下面我们测试通过springboot注解@ConfigurationProperties 根据属性前缀注入属性。

属性类:

import lombok.Data;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;/*** @desc:上海三思科技情报板参数配置* @author: wangsh* @time: 2020/11/11 10:31*/
@Data
@ToString
//通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "thirdplatform.info")
public class InformationConfig {// tcp链接ip地址private String host = "localhost";//端口private Integer port = 9999;//发送文件大小,默认2048,超过该值将循环发送多次,如果文件大小被2048整除,则最后需要在发送0字节命令private Integer fileSize = 2048;//文件名private String fileName = "play.lst";//文件路径private String filePath = "/home/daison/info/play.lst";}

访问接口:

  /*** 查询情报配置属性信息*/@ApiOperation("查询情报配置属性信息")@GetMapping("/getInfoConfig")public Result getInfoConfig() {return new Result().ok(informationConfig);}

可以通过访问接口 http://localhost:8087/thridpaltform/info/getInfoConfig 进行查看属性是否注入及动态修改。

未修改前属性配置:

接口访问结果:

修改属性后:

服务日志:

Refresh keys changed: [thirdplatform.info.host, thirdplatform.info.port, thirdplatform.info.fileSize]
可以看到服务日志提示修改了属性,然后通过接口访问测试:

访问接口:
http://localhost:8087/thridpaltform/info/getInfoConfig

可以看到属性已经修改为最新的值,下面我们测试不同其他环境。

分环境打包属性配置

以上测试了dev环境,这里我们测试prod、test环境是否也能动态属性修改。
首先需要修改bootstrap.yml配置激活 prod或者test环境,

server:port: 8087servlet:
#    设置项目访问路径,http://localhost:8087/thridpaltformcontext-path: /thridpaltform
spring:application:
#  服务名称及 注册服务dataIDname: daison-thridpaltform# 环境 dev|test|prodprofiles:active: prod
#国际化编码messages:encoding: UTF-8basename: i18n/messages,i18n/messages_common
#日期格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss#注册中心cloud:nacos:
#     注册中心discovery:server-addr: localhost:8848service: ${spring.application.name}#        group: DEFAULT_GROUP
#       配置中心服务 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#       需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。config:server-addr: localhost:8848
#        prefix 默认为 spring.application.name 的值prefix: ${spring.application.name}
#        file-exetension 为配置内容的数据格式只支持 properties 和 yaml 类型file-extension: yaml
#        自动刷新配置refresh-enabled: truegroup: DEFAULT_GROUP
#        namespace: 6d649468-26ff-4936-b51a-7640498daec5

启动服务,控制台日志如下,可以看到服务注册成功,并加载daison-thridpaltform-prod.yaml 文件。

修改属性测试,将redis属性修改后验证;

修改后控制台日志信息如下,可以看到监听文件已经生效。

以上就可以按照我们项目定义的按照环境打包测试,通过定义不同方式实现分环境打包。

自定义命名空间

参考config配置文档:
https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-config.adoc

以上是没有指定命名空间,则使用默认的DEFAULT_GROUP 组,public命名空间。在项目中,我们通过会分各种环境打包成不同的服务,配置也需要各自不同,这是就需要将不同的配置分组管理,下面我们介绍自定义命名空间配置文件分环境打包配置。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

注意:该配置必须放在 bootstrap.properties 或者bootstrap.yml 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。
下面自定了三个命名空间,分别为dev、prod、test.

通过nacos管理平台可以看到,自定义命名空间在服务管理、配置管理分别生效。
服务管理

配置管理

nacos注册中心命名空间使用

1、通过以上自定义命名空间,这里以dev开发环境为例,修改配置文件 bootstrap.yml ,增加namespace命名空间,内容如下:

server:port: 8087servlet:
#    设置项目访问路径,http://localhost:8087/thridpaltformcontext-path: /thridpaltform
spring:application:
#  服务名称及 注册服务dataIDname: daison-thridpaltform# 环境 dev|test|prodprofiles:active: prod
#国际化编码messages:encoding: UTF-8basename: i18n/messages,i18n/messages_common
#日期格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss#注册中心cloud:nacos:
#     注册中心,具体属性查看 NacosDiscoveryPropertiesdiscovery:server-addr: localhost:8848
#        服务名,默认值${spring.application.name:}service: ${spring.application.name}
#        分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP
#        命名空间,默认值publicnamespace: 113a46ee-9736-4ff9-b3f9-c0a264908ac4
#        默认使用nacos注册中心,如果不想使用 Nacos 作为您的服务注册与发现,可以将值设置为 falseenabled: true#       配置中心服务 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#       需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。config:server-addr: localhost:8848
#        prefix 默认为 spring.application.name 的值prefix: ${spring.application.name}
#        file-exetension 为配置内容的数据格式只支持 properties 和 yaml 类型file-extension: yaml
#        自动刷新配置refresh-enabled: true
#        分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP
#        namespace: 6d649468-26ff-4936-b51a-7640498daec5
#actor监控
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: ALWAYS

注意:注册中命名空间 spring.cloud.nacos.discovery.namespace 使用的是命名空间id,不是名称。

2、启动客户端服务
客户端服务启动后,从日志可以看到注册是使用指定的命名空间,并注册成功。

登陆nacos管理平台查看注册服务如下:

以上表示注册中心命名空间生效。

config配置中心命名空间使用

1、这里以dev开发环境为例,修改配置文件bootstrap.yml,增加命名空间属性spring.cloud.nacos.config.namespace

server:port: 8087servlet:
#    设置项目访问路径,http://localhost:8087/thridpaltformcontext-path: /thridpaltform
spring:application:
#  服务名称及 注册服务dataIDname: daison-thridpaltform# 环境 dev|test|prodprofiles:active: dev
#国际化编码messages:encoding: UTF-8basename: i18n/messages,i18n/messages_common
#日期格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss#注册中心cloud:nacos:
#     注册中心,具体属性查看 NacosDiscoveryPropertiesdiscovery:server-addr: localhost:8848
#        服务名,默认值${spring.application.name:}service: ${spring.application.name}
#        分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP
#        命名空间,默认值publicnamespace: 113a46ee-9736-4ff9-b3f9-c0a264908ac4
#        默认使用nacos注册中心,如果不想使用 Nacos 作为您的服务注册与发现,可以将值设置为 falseenabled: true#       配置中心服务 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#       需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。config:server-addr: localhost:8848
#        prefix 默认为 spring.application.name 的值prefix: ${spring.application.name}
#        file-exetension 为配置内容的数据格式只支持 properties 和 yaml 类型file-extension: yaml
#        自动刷新配置refresh-enabled: true
#        分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP
#       命名空间,默认值publicnamespace: 113a46ee-9736-4ff9-b3f9-c0a264908ac4
#actor监控
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: ALWAYS
#
##log config
#logging:
#  level:
#    #com.listenrobot.common.http.filter.HttpLoggingFilter: DEBUG
#    org.springframework.data.mongodb.core: DEBUG
#    java.sql.PreparedStatement: DEBUG
#    java.sql.Statement: DEBUG
#    java.sql.Connection: DEBUG
#    com.goo: DEBUG

注意:spring.cloud.nacos.config.namespace 这里的namespace命名空间值为 命名空间id,不是名称。

2、nacos配置管理界面,新增属性配置文件。

属性内容如下:

useLocalCache: false
spring:#redis configredis:database: 0host: xxxxxxxtimeout: 30sport: 6379password: 123456#rabbit configrabbitmq:#    ip地址#    addresses: xxxxxx:5672addresses: localhost:5672#登录用户username: guest#登录密码password: guestvirtual-host: /#链接超时时间connection-timeout: 10000# 开启消息确认机制,确认消息已发送到交换机(Exchange), publisher-confirm-type: correlatedpublisher-confirms: true# 开启消息确认机制publisher-returns: truetemplate:mandatory: true# 监听配置listener:simple:# 客户端确认消息方式 ,默认是自动确认,这里改为手动确认acknowledge-mode: manual#        是否自动启动监听事件auto-startup: true# 不重回队列default-requeue-rejected: false# 初始并发量concurrency: 5# 最大并发量max-concurrency: 20# 最多一次消费多少条数据 -限流prefetch: 1retry:#是否开启重试机制enabled: true#最大重试次数max-attempts: 3#重试间隔时间(单位毫秒)initial-interval: 3000#重试最大时间间隔(单位毫秒)max-interval: 15000#应用于前一重试间隔的乘法器。multiplier: 3#actor监控
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: ALWAYS#log config
logging:level:#com.listenrobot.common.http.filter.HttpLoggingFilter: DEBUGorg.springframework.data.mongodb.core: DEBUGjava.sql.PreparedStatement: DEBUGjava.sql.Statement: DEBUGjava.sql.Connection: DEBUGcom.goo: DEBUG#第三方厂商对接相关配置
thirdplatform:#上海三思科技情报板info:#  tcp链接ip地址host: 58.254.32.50#  端口port: 2929#  发送文件大小,默认2048,超过该值将循环发送多次,如果文件大小被2048整除,则最后需要在发送0字节命令fileSize: 2048#  文件名fileName: play.lst#  文件路径filePath: /home/daison/info/play.lst#广州声凯音响喇叭厂商对接参数rdi:host: 127.0.0.1#  喇叭平台接口平台服务地址 http://127.0.0.1::30081/login/index  admin/yanfa123!serverUrl: https://${thirdplatform.rdi.host}:8090/aio2/gateway/api/v1#  服务注册成功后,每隔5s发送一次检测心跳heartBeatTime: 5000#    是否开启服务心跳检测heartBeatSwitch: false#    情报板、喇叭休眠时间(单位s)rdiAndInfoSleepTime: 30000#  任务所属方案guid xxxxTskProjGuid: XXXX#设备idDstDeviceGuid: 9BCCFAB84D6648CBA5EE2A6EBF5ADF44#  调用ov服务,添加广播推流rtmpCustompath: rtmp://127.0.0.1:1937/BS/#  调用ov服务地址rtmpUrl: http://${thirdplatform.rdi.host}:8800/api/push/addrtmpTskStreamUrl: rtmp://${thirdplatform.rdi.host}:1937/BS/#  车辆事件文本转语音文件 0-未定义 1-事故 2-逆行或倒车 3-超速 4-拥堵 5-缓行 6-停车 7-变道 8-跟车太近#007 注意安全 谨慎驾驶`#    srcFile1: http://127.0.0.1:8089/group1/TextToSpeech/daison20201111-1605073545384.mp3?name=daison20201111-1605073545384.mp3&download=1

3、启动客户端服务

启动客户服务,通过日志可以看到,注册服务成功,配置文件使用spring.profiles.active: dev 进行监听。

注意: 启动客户端服务时,可能配置的config属性未生效,需要通过maven清空,重新编译打包,在运行。

4、清空客户端服务控制台,修改nacos管理平台配置属性,观察客户端服务控制日志。

客户端服务控制台日志信息:

可以看到,修改属性后,立即自动刷新配置属性并生效。同理,prod、test命名空间一样。

自定义 Group 的配置

在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group=DEVELOP_GROUP

注:该配置必须放在 bootstrap.properties 或者bootstrap.yml 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。并且同一个命名空间、组下的文件不能名称一样。

自定义扩展的 Data Id 配置

项目中可能有多个配置文件同时使用,比如公用配置文件commons.yml, redis.yml,mysql.yml等文件,需要如何加载这些文件,这里就需要使用到dataid来实现加载多个配置文件,

Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示:

spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848#config external configuration
#1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新 spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties#2、Data Id 不在默认的组,不支持动态刷新 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 既不在默认的组,也支持动态刷新 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

可以看到:
通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。
通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

Note
多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。

Note
spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:

spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.properties
spring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties

可以看到:
通过 spring.cloud.nacos.config.shared-dataids 来支持多个共享 Data Id 的配置,多个之间用逗号隔开。
通过 spring.cloud.nacos.config.refreshable-dataids 来支持哪些共享配置的 Data Id 在配置变化时,应用中是否可动态刷新, 感知到最新的配置值,多个 Data Id 之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置的 Data Id 都不支持动态刷新。

Note
通过 spring.cloud.nacos.config.shared-dataids 来支持多个共享配置的 Data Id 时, 多个共享配置间的一个优先级的关系我们约定:按照配置出现的先后顺序,即后面的优先级要高于前面。Note
通过 spring.cloud.nacos.config.shared-dataids 来配置时,Data Id 必须带文件扩展名,文件扩展名既可支持 properties,也可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。Note
spring.cloud.nacos.config.refreshable-dataids 给出哪些需要支持动态刷新时,Data Id 的值也必须明确给出文件扩展名。

配置的优先级
Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置

A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置

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

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

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

Nacos Config 对外暴露的 Endpoint
Nacos Config 内部提供了一个 Endpoint, 对应的 endpoint id 为 nacos-config。
访问地址:http://ip:port/项目名/actuator/nacos-config

Endpoint 暴露的 json 中包含了三种属性:
Sources: 当前应用配置的数据信息
RefreshHistory: 配置刷新的历史记录
NacosConfigProperties: 当前应用 Nacos 的基础配置信息

这是 Endpoint 暴露的 json 示例:

访问接口测试:
http://localhost:8087/thridpaltform/actuator/nacos-config

{
NacosConfigProperties: {
serverAddr: "localhost:8848",
username: "",
password: "",
encode: null,
group: "DEFAULT_GROUP",
prefix: "daison-thridpaltform",
fileExtension: "yaml",
timeout: 3000,
maxRetry: null,
configLongPollTimeout: null,
configRetryTime: null,
enableRemoteSyncConfig: false,
endpoint: null,
namespace: "113a46ee-9736-4ff9-b3f9-c0a264908ac4",
accessKey: null,
secretKey: null,
contextPath: null,
clusterName: null,
name: null,
sharedConfigs: null,
extensionConfigs: null,
refreshEnabled: true,
refreshableDataids: null,
configServiceProperties: {
refreshEnabled: "true",
secretKey: "",
namespace: "113a46ee-9736-4ff9-b3f9-c0a264908ac4",
fileExtension: "yaml",
username: "",
enableRemoteSyncConfig: "false",
configLongPollTimeout: "",
prefix: "daison-thridpaltform",
configRetryTime: "",
encode: "",
serverAddr: "localhost:8848",
maxRetry: "",
group: "DEFAULT_GROUP",
clusterName: "",
password: "",
accessKey: "",
endpoint: ""
},
extConfig: null,
sharedDataids: null
},
RefreshHistory: [
{
timestamp: "2020-11-26 15:09:09",
dataId: "daison-thridpaltform-dev.yaml",
group: "DEFAULT_GROUP",
md5: "bf9217e8c7cae0e371989481f6e2a222"
}
],
Sources: [
{
lastSynced: "2020-11-26 15:01:48",
dataId: "daison-thridpaltform-dev.yaml"
},
{
lastSynced: "2020-11-26 15:01:48",
dataId: "daison-thridpaltform.yaml"
},
{
lastSynced: "2020-11-26 15:01:48",
dataId: "daison-thridpaltform"
}
]
}

项目中多个Dataid使用

注:我这里注册中心、配置中心都使用dev命名空间,并且配置有dataid,通过配置多个dataid测试属性修改后,是否支持动态刷新数据。

修改配置属性前

1、通过nacos管理平台,在dev命名空间属性配置中,新增 daison-thridpaltform.yaml、redis.yaml 属性。
配置内容如下:

daison-thridpaltform.yaml 内容:

spring:#rabbit configrabbitmq:#    ip地址#    addresses: xxxxx:5672addresses: localhost:5672#登录用户username: guest#登录密码password: guestvirtual-host: /#链接超时时间connection-timeout: 10000# 开启消息确认机制,确认消息已发送到交换机(Exchange), publisher-confirm-type: correlatedpublisher-confirms: true# 开启消息确认机制publisher-returns: truetemplate:mandatory: true# 监听配置listener:simple:# 客户端确认消息方式 ,默认是自动确认,这里改为手动确认acknowledge-mode: manual#        是否自动启动监听事件auto-startup: true# 不重回队列default-requeue-rejected: false# 初始并发量concurrency: 5# 最大并发量max-concurrency: 20# 最多一次消费多少条数据 -限流prefetch: 1retry:#是否开启重试机制enabled: true#最大重试次数max-attempts: 3#重试间隔时间(单位毫秒)initial-interval: 3000#重试最大时间间隔(单位毫秒)max-interval: 15000#应用于前一重试间隔的乘法器。multiplier: 3#actor监控
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: ALWAYS#log config
logging:level:#com.listenrobot.common.http.filter.HttpLoggingFilter: DEBUGorg.springframework.data.mongodb.core: DEBUGjava.sql.PreparedStatement: DEBUGjava.sql.Statement: DEBUGjava.sql.Connection: DEBUGcom.goo: DEBUG

redis.yaml配置内容:

spring:#redis configredis:database: 0host: xxxxxxtimeout: 30sport: 6379password: 123456

新增配置服务如下:

2、修改客户端服务配置文件bootstrap.yml, 增加dataid相关属性,内容如下:

server:port: 8087servlet:
#    设置项目访问路径,http://localhost:8087/thridpaltformcontext-path: /thridpaltform
spring:application:
#  服务名称及 注册服务dataIDname: daison-thridpaltform
#  # 环境 dev|test|prod
#  profiles:
#    active: dev
#国际化编码messages:encoding: UTF-8basename: i18n/messages,i18n/messages_common
#日期格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss#注册中心cloud:nacos:
#     注册中心,具体属性查看 NacosDiscoveryPropertiesdiscovery:
#        注册服务地址server-addr: localhost:8848
#        服务名,默认值${spring.application.name:}service: ${spring.application.name}
#        分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP
#        命名空间,默认值publicnamespace: 113a46ee-9736-4ff9-b3f9-c0a264908ac4
#        默认使用nacos注册中心,如果不想使用 Nacos 作为您的服务注册与发现,可以将值设置为 falseenabled: true#       配置中心服务 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#       需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。config:
#        是否自动刷新属性,默认是true,可以通过设置 false 来完全关闭enabled: true
#        注册服务地址server-addr: localhost:8848
#        prefix 默认为 spring.application.name 的值prefix: ${spring.application.name}
#        file-exetension 为配置内容的数据格式只支持 properties 和 yaml 类型file-extension: yaml
#        自动刷新配置refresh-enabled: true
#        分组,默认值DEFAULT_GROUPgroup: DEFAULT_GROUP
#       命名空间,默认值publicnamespace: 113a46ee-9736-4ff9-b3f9-c0a264908ac4
#        持多个共享 Data Id 的配置,多个之间用逗号隔开,Data Id 必须带文件扩展名,
#  件扩展名既可支持 properties,也可以支持 yaml/yml。
#  此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响
#        shared-configs: daison-thridpaltform.yaml,redis.yaml
#          给出哪些需要支持动态刷新时,Data Id 的值也必须明确给出文件扩展名。
#  多个 Data Id 之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置的 Data Id 都不支持动态刷新
#        refreshable-dataids: daison-thridpaltform.yaml,redis.yamlext-config[0]:data-id: daison-thridpaltform.yamlgroup: DEFAULT_GROUPrefresh: trueext-config[1]:data-id: redis.yamlgroup: DEFAULT_GROUPrefresh: true#actor监控
management:endpoints:web:exposure:include: "*"endpoint:health:show-details: ALWAYS

3、启动客户端服务:

启动服务后,可以通过日志发现,服务监听到daison-thridpaltform.yaml、redis.yaml,下面我们通过修改属性配置查看属性是否自动刷新。

修改属性配置后

通过nacos管理平台修改 daison-thridpaltform.yaml 文件属性,观察服务控制台日志信息。

客户端服务:

通过日志发现,修改 daison-thridpaltform.yaml 文件属性日志相关信息,服务端监控到,并自动刷新。

2、修改redis.yaml 配置属性:

修改redis配置属性,客户端服务:

经过以上测试,shared-configs配置不起作用了,在老版本可以使用,新版本中使用ext-config或者extension-configs, 建议使用extension-configs,因为ext-config已经过时,并且ext-config设置属性时也调用的是extension-configs, 可以看源代码如下

通过源码分析后,所以新版本中使用extension-configs配置加载属性文件即可。

源码地址:
https://gitee.com/starsky20/nacos-thirdplatform.git

spring cloud nacos安装及项目中使用相关推荐

  1. Spring Cloud Alibaba微服务项目中集成Redis实现分布式事务锁实践

    引言 我们知道同一个进程里面为了解决资源共享而不出现高并发的问题可以通过高并发编程解决,通过给变量添加volatile关键字实现线程间变量可见:通过synchronized关键字修饰代码块.对象或者方 ...

  2. Spring Cloud Gateway 2.1.0 中文官网文档

    目录 1. How to Include Spring Cloud Gateway 2. Glossary 3. How It Works 4. Route Predicate Factories 5 ...

  3. Spring Cloud Nacos整合 Seata 实现分布式事务

    1.Seata 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的 ...

  4. spring cloud + nacos + feign调用

    //by yan 20211119 需求: 简单建个项目,用来测试调用注册在nacos的服务接口. 步骤: idea -> new project-> Spring Initializr ...

  5. springcloud gateway ribbon使用_Github点赞接近 70k 的Spring Cloud学习教程+实战项目推荐!牛批!...

    这篇文章继续来推荐 Spring Cloud 的教程和实战项目了!想必不用不多说,大家都知道 Spring Cloud 的重要程度.几乎稍微有点规模的公司,一般都离不开要和微服务打交道.同时,Spri ...

  6. Github点赞接近 70k 的Spring Cloud学习教程+实战项目推荐!牛批!

    本文已经收录进:awesome-java (Github 上非常棒的 Java 开源项目集合) 这篇 Guide 来推荐 Spring Cloud 的教程和实战项目了!想必不用不多说,大家都知道 Sp ...

  7. spring cloud nacos 配置多环境打包

    spring cloud nacos 配置多环境打包 一.前言 因需要将项目打包给N多第三方,他们有各自的nacos地址,又需要实现代码无侵入(配置文件存在很多版本如 application-tocd ...

  8. 企业开发必备的6个Spring Cloud微服务开源项目

    前言 今天介绍六款比较热门的SpringCloud微服务项目,感兴趣的可以clone下来研究一下,相信对你学习微服务架构很有帮助.一键获取源码地址 一.Cloud-Platform 介绍 Cloud- ...

  9. Spring Cloud + Nacos 三部曲之Discovery消费者

    1.Spring Cloud+Nacos 三部曲之Config 2.Spring Cloud + Nacos 三部曲之Discovery服务注册发现 3.Spring Cloud + Nacos 三部 ...

  10. Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明

    Atitit.mybatis的测试  以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...

最新文章

  1. cxGRID能否对模板进行保存
  2. Zookeeper基于Java访问-授权对象
  3. 介绍一些平时用得到的服务/组件
  4. JS实现刷新iframe的方法
  5. Android播放器之SurfaceView与GLSurfaceView
  6. Linux检查wlan0是否存在,linux - airmon-ng将wlan0更改为wlan0mon但不恢复[​​关闭] - 堆栈内存溢出...
  7. 归档-软考网规-存储部分-san-nas-das
  8. CISCO安全 ×××技术
  9. ubunntu安装php7.0_乌班图Ubuntu 16.04下安装PHP 7过程详解
  10. 20180810 突然发现自己不小心跑到了数据分析呈现岗位
  11. 揭秘:客服如何创造价值和自我超越
  12. python编程a的x次方_python平方-Python,平方
  13. C语言—俄罗斯方块(新手向)
  14. 做数据分析,一定会用到的12类实用图表
  15. 1054: 猴子吃桃(C)
  16. 常见的python与爬虫面试题准备好了
  17. linux的iso镜像文件,linux系统安装iso文件方法
  18. 用js javascript 创建网页快捷方式
  19. 安卓支持App内文字翻译
  20. dashboard的安装使用

热门文章

  1. 观察者模式(Observer模式)详解
  2. 70 | Python 网络爬虫案例 —— 爬取电影数据
  3. 拓展:简化接线_simulink子系统的搭建和封装
  4. matlab的fir1的ftype,数字滤波器的matlab与FPGA实现读书笔记(二)FIR滤波器的matlab设计(窗函数)...
  5. 不看不知道!冬天的南北方差异竟有这么大!
  6. 【Thingsboard】设备自注册/批量导入/设备认领
  7. 计算机网络(数据链路层CSMA/CD协议)
  8. 使用Python聚类算法,实现RFM客户分群,进行精准营销!
  9. 14 正整数分解质因数
  10. 供应链管理的七大思想 (zt)