springboot集成nacos步骤
1.引入pom依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.启动类上加@EnableDiscoveryClient注解
注:springboot现在已经允许不加这个注解也能注册了。这个注解得作用是让注册中心能够发现,扫描到改服务。
3.增加配置
spring:
cloud:
nacos:
discovery:
service: msb-stock
server-addr: localhost:8848
注:bootstrap.yml文件优先级高于application.yml文件,所以nacos得配置文件一般写在bootstap.yaml文件中
4.@RefreshScope注解 动态刷新nacos中得配置
-
nacos共享配置
spring:
application:
name: nacos-config-multi
main:
allow-bean-definition-overriding: true
cloud:
nacos:
username: ${nacos.username}
password: ${nacos.password}
config:
server-addr: ${nacos.server-addr}
namespace: ${nacos.namespace}用于共享的配置文件
shared-configs:
- data-id: common-mysql.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP- data-id: common-redis.yaml group: SPRING_CLOUD_EXAMPLE_GROUP - data-id: common-base.yaml group: SPRING_CLOUD_EXAMPLE_GROUP
常规配置文件
优先级大于 shared-configs,在 shared-configs 之后加载
extension-configs:
- data-id: nacos-config-advanced.yaml
group: SPRING_CLOUD_EXAMPLE_GROUP
refresh: true- data-id: nacos-config-base.yaml group: SPRING_CLOUD_EXAMPLE_GROUP refresh: true
参数解析
- data-id : Data Id
- group:自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
- refresh: 控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
- 扩展配置
7配置文件优先级:
共享配置<扩展配置<nacos-config<nacos-config.yaml<nacos-config-prod.yaml. 也就是后面得配置有可能会覆盖前面得配置 - nacos动态刷新原理
Nacos客户端发送一个请求连接到服务端,然后服务端中会有一个29.5+0.5s的一个hold期,然后服务端会将此次请求放入到allSubs队列中等待,触发服务端返回结果的情况只有两种,第一种是时间等待了29.5秒,配置未发生改变,则返回未发生改变的配置;第二种是操作Nacos Dashboard或者API对配置文件发生一次变更,此时会触发配置变更的事件,发送一条LocalDataEvent消息,此时服务端监听到消息,然后遍历allSubs队列,根据对应的groupId找到配置变更的这条ClientLongPolling任务,并且通过连接返回给客户端
Nacos动态刷新避免了服务端对客户端进行push操作时需要保持双方的心跳连接,同样也避免了客户端对服务端进行pull操作时数据的时效性问题,不必频繁去拉去服务端的数据
所以nacos动态刷新原理是客户端主动拉取的,通长轮询的方式(Long Polling)的方式来获取配置数据