今天在使用alinacos 进行spring cloud服务注册、发现、与治理时碰到了一些问题。现记录如下,有需要的同学可以参考下。
注意几点:
启动的顺序,不能搞错。否则会有错误。
发布配置的api的请求方式为post ,
配置的值根据你的配置上下文的格式不同而有所不同,如yml则值为 key: value 冒号后要有一个空格,properties格式的话,值为key=value,一个是等号,一个是冒号。。
服务发现和注册的配置与配置变更的配置第四个单词是不相同的,一个是config,一个是discovery:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
1、必须先启动nacos,启动方式:Nacos Quick Start
2、在nacos新建一个配置项,配置项的名称就是nacos中注册服务的dataId,命名规则为:
${prefix}-${spring.profiles.active}.${file-extension}
prefix:默认值为spring.application.name 即服务启动的名称,也可以通过spring.cloud.nacos.config.prefix这个配置项来手动配置
spring.profiles.active:的值对应当前spring boot活动环境的名称,配置方式可以参考spring boot的配置。如果spring.profiles.active的值为空,那么相应的连字符"-"也将删除,即dataId的格式为${prefix}.${file-extension}
file-extension:是spring cloud配置上下文的格式。可以通过spring.cloud.nacos.config.file-extension进行配置,目前只支持properties and yaml两种格式。示例spring.cloud.nacos.config.file-extension=properties 或者 yml
注意:这些配置项都需要写到bootstrap.yml或者 bootstrap.properties文件中。
3、一旦nacos服务器启动完成,就可以通过以下几个步骤来测试 配置动态更新了。
a、 新建一个spring cloud项目,添加如下maven依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
</dependencies>
注意:spring-cloud-starter-alibaba-nacos-config各版本对应的spring boot兼容版本如下表:
spring-cloud-starter-alibaba-nacos-config spring boot
b、在bootstrap.yml中配置nacos服务器的地址并且指定应用的名称(即第二步配置的dataId).
c、新建一个controller来测试配置的自动更新,新建的controller中需要添加一个spring boot的原生注解:@RefreshScope
代码如下:
d、现在可以启动应用程序了,如果启动正常结果如下:
注意:这一步我试了好几次才测试通过,因为之前没有先启动nacos,并且在nacos服务器上添加一个配置项,即上面的第二个步骤,所以一直测试不通过,启动结果如下:
f、测试动态修改配置的值:通过调用nacos的开放api来发布配置信息,
url:http://192.168.10.202:8848/nacos/v1/cs/configs?dataId=example-dev.yml&group=DEFAULT_GROUP&content=useLocalCache=false
注意两点:
》这是个post接口,可以通过postman来调用 ,我就是用postman来调用的,
》如果你的配置文件格式是yml,那么content字段的值对应的也应该修改为如下内容 :useLocalCache:false,这里是冒号而不是等号
网友评论