Prenez l'habitude d'écrire ensemble ! C'est le 9ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .
Répertoire d'articles de la série Microservices
- Microservices approfondis - Principe d'assemblage automatique SpringBoot
- Microservices approfondis - Composant d'appel SpringCloud Feign
- Microservices approfondis - enregistrement de service et découverte de la base de SpringCloud Eureka
- Microservices approfondis - Enregistrement des services et découverte de la haute disponibilité et des principes de base de Spring Cloud Eureka
- Fondation Nacos approfondie des microservices et construction de serveurs Nacos
- Microservices-Nacos Core Concepts approfondis et pratique de découverte de services
- Microservices approfondis - Concepts et pratiques de base du centre de configuration Nacos
avant-propos
Cette série vous plonge dans l'utilisation de base et les principes sous-jacents de chaque cadre du système microservice Spring. L'article précédent a présenté les concepts de base de Nacos et la fonction du client pour réaliser la découverte de service. Cette section vous amènera à apprendre les concepts de base et le combat réel de Nacos Config.
Le rôle du centre de configuration distribué
Le centre de configuration distribué peut gérer de manière centralisée la configuration du programme et réaliser la modification dynamique du contenu de la configuration du programme sans redémarrer le conteneur de services.Les centres de configuration distribués sur le marché incluent le centre de configuration Apollo, SpringCloud Config et Nacos Config de Ctrip.
Qu'est-ce que le centre de configuration Nacos
- Nacos Config fournit un magasin clé/valeur pour stocker la configuration et d'autres métadonnées, offrant une prise en charge côté serveur et côté client pour la configuration externalisée dans les systèmes distribués
- À l'aide de Nacos Config, vous pouvez gérer de manière centralisée la configuration des propriétés externes des applications Spring Cloud dans l'interface de configuration de Nacos Server.
- Au fur et à mesure que l'application passe du développement au test en passant par la production via un pipeline de déploiement (ex: Jenkins), il est possible de gérer la configuration entre ces environnements et de s'assurer que l'application a tout ce dont elle a besoin pour fonctionner lors de la migration
Concepts de base du centre de configuration Nacos
- Configuration
Dans le processus de développement logiciel, certains paramètres et variables qui doivent être modifiés sont séparés du code et gérés indépendamment, et existent sous la forme de fichiers de configuration indépendants. Différentes configurations peuvent être commutées en fonction des différents environnements de déploiement. Les changements de configuration sont l'un des moyens les plus efficaces de régler les temps d'exécution du système.
- 配置管理 (Configuration Management)
在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理
Nacos 配置中心的配置一致性模型
Nacos 配置管理一致性分为两部分,第一部分是Server间一致性协议(Nacos Server集群环境),一个是SDK(Nacos Config Client)与Server的一致性协议,配置作为分布式系统中飞强一致性数据,在出现脑裂的时候高可用性高于一致性,因此配置中心采用的是AP一致性协议
Nacos Config 实战
需实现效果:通过Nacos实现配置的动态变更
1、启动Nacos Server 2、nacos server中新建serviceA-dev.yaml
3、搭建Nacos Config 服务 3.1) 引入Nacos Client依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
复制代码
3.2) 添加bootstrap.yaml
spring:
profiles:
active: dev #指定环境
application:
name: serviceA # 服务名称
cloud:
nacos:
config:
server-addr: nacos:8848
file-extension: yaml
username: nacos
password: nacos
复制代码
3.3) 添加启动类,测试功能
@SpringBootApplication
public class NacosConfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.out.println("my name is :"+userName+"; age: "+userAge);
}
}
复制代码
启动服务之后,控制台输出
Nacos Config功能
支持profile粒度的配置
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}
这个配置项来配置,实现读取不同的环境
spring:
profiles:
active: dev #指定环境
复制代码
支持自定义namespace配置
Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等 在没有明确指定 ${spring.cloud.nacos.config.namespace}
配置的情况下, 默认使用的是 Nacos 上 public
这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现: namespace 对应的是命名空间的id
spring:
cloud:
nacos:
config:
namespace: xxx # 命名空间ID
复制代码
L'ID d'espace de noms est généré par défaut et peut être spécifié
Prend en charge la configuration de groupe personnalisée
En l'absence de ${spring.cloud.nacos.config.group}
configuration , il est utilisé par défaut DEFAULT_GROUP
. Si vous avez besoin de personnaliser votre propre groupe, vous pouvez le faire via la configuration suivante :
spring:
cloud:
nacos:
config:
group: DEV_GROUP
复制代码
Prise en charge de la configuration partagée
La configuration partagée résout le problème du partage de configuration entre plusieurs applications
spring:
cloud:
nacos:
config:
shared-configs:
- data-id: shared-configs.yml
refresh: true
复制代码
- Plusieurs configurations d'ID de données partagées sont prises en charge via spring.cloud.nacos.config.shared-configs[n].data-id.
- Utilisez spring.cloud.nacos.config.shared-configs[n].group pour configurer le groupe dans lequel se trouve l'ID de données personnalisé. S'il n'est pas explicitement configuré, la valeur par défaut est DEFAULT_GROUP.
- Utilisez spring.cloud.nacos.config.shared-configs[n].refresh pour contrôler si l'ID de données prend en charge l'actualisation dynamique dans l'application lorsque la configuration est modifiée, la valeur par défaut est false
Prise en charge de la configuration DataId étendue personnalisée
Prise en charge de la configuration de l'identifiant de données personnalisé
spring:
cloud:
nacos:
config:
extension-configs:
- data-id: shared-configs.yml
refresh: true
复制代码
- La configuration de plusieurs ID de données est prise en charge via la méthode de configuration spring.cloud.nacos.config.extension-configs[n].data-id.
- Personnalisez le groupe dans lequel se trouve l'ID de données via la méthode de configuration spring.cloud.nacos.config.extension-configs[n].group. Si la configuration n'est pas claire, la valeur par défaut est DEFAULT_GROUP.
- La méthode de configuration de spring.cloud.nacos.config.extension-configs[n].refresh est utilisée pour contrôler si l'ID de données prend en charge l'actualisation dynamique dans l'application lorsque la configuration change et perçoit la dernière valeur de configuration. La valeur par défaut n'est pas prise en charge
Résumer
Les bases de Nacos sont presque terminées, et je vous apporterai la partie analyse du code source Nacos plus tard, merci pour votre soutien