Nacos注册中心使用实战!Spring Cloud集成Na

这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

基本概念

  • 通过Nacos Serverspring-cloud-starter-alibaba-nacos-config实现配置的动态变更
  • 通过Nacos Serverspring-cloud-starter-alibaba-nacos-discovery实现服务的注册与发现

配置

Nacos config

  • Nacos提供用于存储配置和其余元数据的key-value存储,为分布式系统中的外部化配置提供服务器端和客户端支持
  • 使用Spring Cloud Alibaba Nacos Config, 可以在Nacos Server集中管理你Spring Cloud应用的外部属性配置
  • 初始化Nacos:
    • 启动Nacos, 然后在Nacos添加配置:
1
2
3
4
5
nacos复制代码Data ID:nacos-config.properties
Group:DEFAULT_GROUP
配置格式:Properties
配置内容:user.name=nacos-config-properties
user.age=90
  • 其中dataid是以默认的文件扩展名方式properties为扩展名
  • 配置:
+ 引入**nacos config**依赖
1
2
3
4
xml复制代码<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 使用bootstrap.properties配置文件来配置Nacos Server地址:
1
2
properties复制代码spring.application.name=nacos-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  • 如果使用域名的方式来访问nacos,spring.cloud.nacos.config.server-addr配置的方式为 [域名:port]
    • 比如nacos的域名为abc.com.nacos, 监听的端口为80. 则配置为spring.cloud.nacos.config.server-addr=abc.com.nacos:80. 端口号80不能省略
  • 启动:
1
2
3
4
5
6
7
8
9
10
java复制代码@SpringBootApplication
public class ProviderApplication {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :"+userName+"; age: "+userAge);
}
}
  • 输出:
1
console复制代码user name :nacos-config-properties; age: 90

yaml文件配置

  • spring-cloud-starter-alibaba-nacos-config支持yaml格式
  • 在应用的bootstrap.properties配置文件中显示的声明dataid文件扩展名:
1
properties复制代码spring.cloud.nacos.config.file-extension=yaml
  • 初始化Nacos,添加一个dataid为yaml扩展名的配置:
1
2
3
4
5
nacos复制代码Data ID:nacos-config.yaml
Group:DEFAULT_GROUP
配置格式:YAML
配置内容:user.name:nacos-config-yaml
user.age:68
  • 启动:
1
2
3
4
5
6
7
8
9
10
java复制代码@SpringBootApplication
public class ProviderApplication {

public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :"+userName+"; age: "+userAge);
}
}
  • 输出:
1
console复制代码user name :nacos-config-yaml; age: 68

配置动态更新

  • spring-cloud-starter-alibaba-nacos-config支持配置的动态更新
1
2
3
4
5
6
7
8
9
10
11
12
13
java复制代码@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
while(true) {
//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" + userName + "; age: " + userAge);
TimeUnit.SECONDS.sleep(1);
}
}
}
  • 可以在配置文件中关闭动态更新:
1
properties复制代码spring.cloud.nacos.config.refresh.enabled=false

配置profiles粒度

  • spring-cloud-starter-alibaba-nacos-config加载配置时:
    • 不仅仅加载以dataid[spring.application.name].[file-extension:properties] 为前缀的基础配置
    • 还加载dataid[spring.application.name]-[profile].[file-extension:properties] 的基础配置
  • 多环境下的不同配置,可以通过Spring提供的spring.profiles.active这个配置项来配置:
1
2
properties复制代码# spring.profiles.active当通过配置文件来指定时必须放在bootstrap.properties文件中
spring.profiles.active=develop
  • 初始化Nacos配置:
1
2
3
4
nacos复制代码Data ID:nacos-config-develop.yaml
Group:DEFAULT_GROUP
配置格式:YAML
配置内容:current.env:develop-env
  • 启动:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
java复制代码@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
while(true) {
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
//获取当前部署的环境
String currentEnv = applicationContext.getEnvironment().getProperty("current.env");
System.err.println("in "+currentEnv+" enviroment; "+"user name :" + userName + "; age: " + userAge);
TimeUnit.SECONDS.sleep(1);
}
}
}
  • 输出:
1
console复制代码in develop-env enviroment; user name :nacos-config-yaml-update; age: 68
  • 如果需要切换到生产环境,只需要更改spring.profiles.active参数配置:
1
properties复制代码spring.profiles.active=product
  • 在项目实践中这个变量的值是需要不同环境而有不同的值,通常的做法是通过-Dspring.profiles.active=< profile >参数指定其配置来达到环境间灵活的切换

配置自定义namespace

  • Nacos中的namespace:
    • namespace用于进行租户粒度的配置隔离
    • 不同的命名空间下,可以存在相同的GroupData ID的配置
    • namespace常常用于不同环境的配置的区分隔离
  • 在没有明确指定spring.cloud.nacos.config.namespace配置时,默认使用的是NacosPublic这个namespae. 可以通过配置自定义的命名空间:
1
properties复制代码spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
  • 该配置必须放在bootstrap.properties文件中,此外spring.cloud.nacos.config.namespace的值是namespace对应的id,id值可以在Nacos的控制台获取.并且在添加配置时注意不要选择其余的namespace, 否则将会导致读取不到正确的配置

配置自定义Group

  • 在没有明确指定spring.cloud.nacos.config.group配置的情况下,默认使用的是DEFAULT_GROUP. 可以通过配置自定义Group:
1
properties复制代码spring.cloud.nacos.config.group=DEVELOP_GROUP
  • 该配置必须放在bootstrap.properties文件中,并且在添加配置时Group的值一定要和 spring.cloud.nacos.config.group的配置值一致

配置自定义Data Id

  • Spring Cloud Alibaba Nacos Config支持自定义Data Id的配置,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
properties复制代码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.extension-configs[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true
  • spring.cloud.nacos.config.extension-configs[n].data-id配置支持多个Data Id的配置
  • spring.cloud.nacos.config.extension-configs[n].group配置自定义Data Id所在的组,不明确配置的话,默认是DEFAULT_GROUP

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%