【Nacos】Nacos-动态服务发现、配置管理、配置中心、服务注册

1.1 引入依赖

引入依赖spring-cloud-starter-alibaba-nacos-discoveryspring-cloud-starter-alibaba-nacos-config

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

1.2 添加Nacos配置

登陆Nacos:http://localhost:8848/nacos, 找到配置列表中hssa命名空间,在其下面添加配置
在这里插入图片描述

1.2.1 项目配置

DataId配置规则:服务名 + 环境名 + 配置文件后缀【$(prefix)-$(spring.profile.active).$(file-extension)】,以虾酱系统(shrimp-paste)为例,我们可配置成以下方式:shrimp-paste、shrimp-paste.properties、shrimp-paste-dev.properties、shrimp-paste-prod.properties、shrimp-paste-test.properties,其中以shrimp-paste优先级最高,shrimp-paste配置内容复制shrimp-paste\shrimp-paste-web\src\main\resources\application-test.properties中内容即可

1.2.2 公共redis配置

其中redisson.properties为所有项目公共扩展配置

  #序列化方式(默认为JsonJackson)
  redisson.codec=org.redisson.client.codec.stringCodec
  #密码
  redisson.password=redisPwd
  #指定集群模式
  redisson.model=cluster
  #最大重试次数
  redisson.retry-attempts=3
  #空闲连接PING间隔时间(0为关闭该功能)
  redisson.ping-connection-interval=3000
  # 集群节点
  redisson,multiple-server-config.nodeAddresses=192.168.1.1:30360,192.168.1.1:30361
  #主节点连接池最小连接数
  redisson.multiple-server-config.master-connection-minimum-idle-size=8
  #主节点连接池最大连接数
  redisson,multiple-server-config.master-connection-pool-size=32
  #从节点连接池最小连接数
  redisson,multiple-server-config.slave-connection-minimum-idle-size=8
  #从节点连接池最大连接数
  redisson.multiple-server-config.slave-connection-pool-size=32
  #主从节点是否参与查询,默认只有从节点参与查询
  redisson.multiple-server-config.read-mode=slave

1.3 更改项目配置

1.3.1 添加bootstrap配置文件

在目录shrimp-paste\shrimp-paste-web\src\main\resources、shrimp-paste\shrimp-paste-web\src\test\resources目录下添加bootstrap.properties文件,文件内容如下

# 服务名称
spring.application.name=shrimp-paste

# 注册与发现
# 注册中心地址
spring.cloud.nacos.discovery.server-addr = localhost:8848
# 命名空间Id
spring.cloud.nacos.discovery.namespace = b2371ce7-1b72-46c3-aad7-98296ea2e99d
# 账号
spring.cloud.nacos.discovery.username = nacos
# 密码
spring.cloud.nacos.discovery.password = nacos

# 配置中心
# 注册中心地址
spring.cloud.nacos.config.server-addr = localhost:8848
# 命名空间Id
spring.cloud.nacos.config.namespace = b2371ce7-1b72-46c3-aad7-98296ea2e99d
# 账号
spring.cloud.nacos.config.username = nacos
# 密码
spring.cloud.nacos.config.password = nacos
# 分组[默认DEFAULT_GROUP]
spring.cloud.nacos.config.group = SHRIMP_PASTE_GROUP
# data-id后缀[默认properties]
spring.cloud.nacos.config.file-extension = properties
# 默认开启
spring.cloud.nacos.config.refresh-enabled = true

# 拓展配置[扩展配置数字越大优先级越高]
spring.cloud.nacos.config.extension-configs[0].data-id = redisson.properties
spring.cloud.nacos.config.extension-configs[0].group = SHRIMP_PASTE_COMMON_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh = true

1.4 环境变量使用

以上方式在各个环节中部署非常不方便,不管什么环境都是同一个配置非常不方便,因此我们可以使用环境变量方式解决此问题,配置调整为如下方式

# 注册与发现
# 注册中心地址
spring.cloud.nacos.discovery.server-addr = ${NACOS_SERVER_ADDR:localhost:8848}
# 命名空间Id
spring.cloud.nacos.discovery.namespace = ${NACOS_NAMESPACE:b2371ce7-1b72-46c3-aad7-98296ea2e99d}
# 账号
spring.cloud.nacos.discovery.username = ${NACOS_USERNAME:nacos}
# 密码
spring.cloud.nacos.discovery.password = ${NACOS_PASSWORD:nacos}

1.5 启动原理

1.5.1 配置启动类

文件spring-cloud-starter-alibaba-nacos-config-2.2.7.RELEASE.jar!\META-INF\spring.factories配置启动类

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration
org.springframework.boot.diagnostics.FailureAnalyzer=\
com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
org.springframework.boot.env.PropertySourceLoader=\
com.alibaba.cloud.nacos.parser.NacosJsonPropertySourceLoader,\
com.alibaba.cloud.nacos.parser.NacosXmlPropertySourceLoader
org.springframework.context.ApplicationListener=\
com.alibaba.cloud.nacos.logging.NacosLoggingListener

1.5.2 加载配置

NacosConfigBootstrapConfiguration该类使用@ConditionalOnProperty(
name = {“spring.cloud.nacos.config.enabled”},
matchIfMissing = true
)注解控制配置中心的开启和关闭,该类主要负责加载配置并向spring容器注册NacosConfigPropertiesNacosPropertySourceLocator(读取配置属性)

1.5.3 NacosPropertySourceLocator

NacosPropertySourceLocator使用NacosPropertySourceBuilder.ConfigService加载配置

核心代码data = this.configService.getConfig(dataId, group, this.timeout);

    private List<PropertySource<?>> loadNacosData(String dataId, String group, String fileExtension) {
        String data = null;

        try {
            data = this.configService.getConfig(dataId, group, this.timeout);
            if (StringUtils.isEmpty(data)) {
                log.warn("Ignore the empty nacos configuration and get it based on dataId[{}] & group[{}]", dataId, group);
                return Collections.emptyList();
            }

            if (log.isDebugEnabled()) {
                log.debug(String.format("Loading nacos data, dataId: '%s', group: '%s', data: %s", dataId, group, data));
            }

            return NacosDataParserHandler.getInstance().parseNacosData(dataId, data, fileExtension);
        } catch (NacosException var6) {
            log.error("get data from Nacos error,dataId:{} ", dataId, var6);
        } catch (Exception var7) {
            log.error("parse data from Nacos error,dataId:{},data:{}", new Object[]{dataId, data, var7});
        }

        return Collections.emptyList();
    }

加载配置文件部分日志如下

2023-07-11 13:09:41.555  WARN [] [] [main] WARN  com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[shrimp-paste.properties] & group[SHRIMP_PASTE_GROUP]
2023-07-11 13:09:41.564  WARN [] [] [main] WARN  com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[shrimp-paste-dev.properties] & group[SHRIMP_PASTE_GROUP]
2023-07-11 13:09:41.575  WARN [] [] [main] WARN  com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[shrimp-paste-prod.properties] & group[SHRIMP_PASTE_GROUP]
2023-07-11 13:09:41.585  WARN [] [] [main] WARN  com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[shrimp-paste-test.properties] & group[SHRIMP_PASTE_GROUP]
2023-07-11 13:09:41.587  INFO [] [] [main] INFO  org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-shrimp-paste-test.properties,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-shrimp-paste-prod.properties,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-shrimp-paste-dev.properties,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-shrimp-paste.properties,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-shrimp-paste,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-redisson.properties,SHRIMP_PASTE_COMMON_GROUP'}]
2023-07-11 13:09:41.652  INFO [] [] [main] INFO  org.springframework.boot.SpringApplication : The following profiles are active: dev,prod,test

1.6 刷新配置

NacosConfigAutoConfiguration该类想容器注册NacosContextRefresher负责刷新配置,配置文件刷新日志如下

2023-07-11 13:05:19.669  INFO [] [] [nacos.client.cachedata.internal.notifier] INFO  org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-shrimp-paste-prod.properties,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-shrimp-paste.properties,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-shrimp-paste,SHRIMP_PASTE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-redisson.properties,SHRIMP_PASTE_COMMON_GROUP'}]
2023-07-11 13:05:19.858  INFO [] [] [nacos.client.cachedata.internal.notifier] INFO  org.springframework.boot.SpringApplication : The following profiles are active: prod
2023-07-11 13:05:19.876  INFO [] [] [nacos.client.cachedata.internal.notifier] INFO  org.springframework.boot.StartupInfoLogger : Started application in 1.128 seconds (JVM running for 132.472)
2023-07-11 13:05:22.987  INFO [] [] [nacos.client.cachedata.internal.notifier] INFO  org.springframework.cloud.endpoint.event.RefreshEventListener : Refresh keys changed: []

1.7 健康检查

NacosConfigEndpointAutoConfiguration该类注册NacosConfigEndpoint(actuator端点)和NacosConfigHealthIndicator(健康检查)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值