Introduction détaillée à l'utilisation du centre de configuration Nacos

        Le dernier article a présenté l' utilisation de Nacos en tant que centre d'enregistrement . En outre, Nacos peut également être utilisé en tant que centre de configuration. Ensuite, cet article présentera l'utilisation de base de Nacos en tant que centre de configuration. Tout d'abord, comprenons pourquoi nous devons utiliser le centre de configuration. .

1. Pourquoi avez-vous besoin d'un centre de configuration :

Avant qu'il n'y ait pas de centre de configuration, la configuration traditionnelle de l'application présente les points faibles suivants :

(1) En utilisant une configuration statique locale, les performances en temps réel ne peuvent pas être garanties : la modification de la configuration est rigide et nécessite un long cycle de test et de publication, et ne peut pas être notifiée au client dans les meilleurs délais. Certaines configurations ont des exigences élevées en termes de temps réel. performances temporelles, telles que la configuration de commutation active-veille. Ou vous devez modifier la configuration en cas de panne. Dans ce cas, la configuration statique traditionnelle ou la méthode de réédition est utilisée pour configurer la configuration, de sorte que la vitesse de réponse est très lent, et le risque commercial est très grand.

(2) Il est facile de provoquer des accidents de production : Par exemple, lors de la publication, il est facile de mettre en production la configuration de l'environnement de test, ce qui provoque des accidents de production.

(3) La configuration est dispersée et le format n'est pas standard : certains utilisent le format properties, certains utilisent le format xml, et certains stockent la DB. L'équipe a tendance à construire ses propres roues, et il existe différentes méthodes.

(4) La configuration manque de fonctions d'audit de sécurité, de contrôle de version et de contrôle des autorisations de configuration : qui ? à quelle heure? Quelle configuration a été modifiée ? Il n'y a aucun moyen de retracer, et il n'y a aucun moyen de revenir à la version précédente à temps en cas de problème ; il n'y a aucun moyen d'authentifier et d'autoriser la publication des modifications de configuration, et tout le monde peut modifier et publier la configuration .

        Le centre de configuration est différent de la manière traditionnelle de distribuer les informations de configuration à tous les coins du système, et gère de manière centralisée et uniforme les fichiers de configuration dans le système, au lieu de gérer les serveurs individuels un par un. Alors, quel est l'avantage de faire cela?

(1) Grâce au centre de configuration, la configuration peut être standardisée et le format peut être unifié

(2) Lorsque les informations de configuration changent, la modification prend effet en temps réel, et les modifications correspondantes peuvent être détectées automatiquement sans redémarrer le serveur, et les nouvelles modifications peuvent être envoyées aux programmes correspondants de manière unifiée pour répondre rapidement aux changements . Par exemple, une certaine fonction est réservée aux utilisateurs d'une certaine région et une certaine fonction n'est disponible que pendant la grande période de promotion. Après avoir utilisé le centre de configuration, seul le personnel concerné doit ajuster dynamiquement les paramètres dans le centre de configuration, essentiellement en temps réel ou quasi-temps réel Ajustez l'activité correspondante.

(3) Le problème peut également être tracé via la fonction d'audit

Deuxièmement, l'utilisation du centre de configuration Nacos :

        Il existe trois solutions principales pour le centre de configuration dans les microservices : Nacos, Apollo et Config+Bus. Cependant, dans cet article, nous introduisons principalement l'utilisation de Nacos comme centre de configuration. Les lecteurs intéressés par les deux autres méthodes peuvent se référer au Internet par eux-mêmes.

1. Springboot intègre le centre de configuration Nacos :

(1) Tout d'abord, nous déclarons les informations de version du projet :

<properties>
    <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
</properties>

<!--  只声明依赖,不引入依赖 -->
<dependencyManagement>
    <dependencies>
        <!-- 声明springBoot版本 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 声明springCloud版本 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- 声明 springCloud Alibaba 版本 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

(2) Ajoutez la dépendance maven du centre de configuration nacos :

<!-- SpringCloud Ailibaba Nacos Config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(3) Ajoutez la configuration pertinente du centre de configuration nacos dans le fichier application.properties :

spring.profiles.active=dev
spring.application.name=cloud-producer-server
server.port=8080

# nacos 配置中心地址
spring.cloud.nacos.config.server-addr=localhost:8848
# 配置文件的类型
spring.cloud.nacos.config.file-extension=yaml

(4) Créez un nouveau jeu de configuration avec DataID cloud-producer-server-dev.yaml dans la console nacos :

La raison pour laquelle le DataID est nommé cloud-producer-server-dev.yaml sera décrite ci-dessous

 (5) Écrivez une classe de test :

//配置发布之后,动态刷新配置
@RefreshScope
@RestController
@RequestMapping("provider")
public class ProviderController
{
    // 使用原生注解@Value()导入配置
    @Value("${user.id}")
    private String id;
    @Value("${user.name}")
    private String name;
    @Value("${user.age}")
    private String age;

    @GetMapping("getNacosConfig")
    public String providerTest()
    {
        return "我是provider,已成功获取nacos配置中心的数据:(id:" + id + ",name:" + name + ",age:" + age +")";
    }
}

(6) Lancer la vérification du service :

        Démarrez le projet, visitez l'interface http://localhost:8080/provider/getNacosConfig , vous pouvez voir que les informations de configuration du centre de configuration nacos ont pris effet et ont été obtenues avec succès

(7) Vérifiez la configuration de l'actualisation dynamique :

        L'actualisation dynamique de la configuration est l'une des fonctions principales du centre de configuration. Supposons que je doive modifier la valeur de user.name maintenant, vais-je modifier directement la configuration dans Nacos pour qu'elle prenne effet ? Essayons de modifier directement la configuration dans Nacos en "zhangsan", comme indiqué ci-dessous :

 Ne redémarrez pas le projet et ne revisitez pas l'interface pour le moment, les résultats sont les suivants :

        Nous avons constaté que la configuration a été actualisée dynamiquement, pourquoi ? En fait, cela est dû à l'effet de l'ajout de l'annotation @RefreshScope à la classe.

//配置发布之后,动态刷新配置
@RefreshScope
@RestController
@RequestMapping("provider")
public class ProviderController

2. Les concepts de base de Nacos :

2.1、ID de données:

(1) Format de dénomination de l'ID de données :

        Plus tôt, nous avons démontré la création d'un nouvel ensemble de données avec le DataID cloud-producer-server-dev.yaml dans la console nacos, alors quel est cet ID de données ? L'ID de données est l'identifiant unique d'un jeu de configuration. Une application peut contenir plusieurs jeux de configuration, et chaque jeu de configuration doit être identifié par un nom significatif. Alors, comment l'ID de données obtient-il la valeur ? Le format populaire est "prefix-environment-extension", comme suit :

${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

① préfixe : préfixe, la valeur par défaut est la valeur de spring.application.name, ou peut être configuré via l'élément de configuration spring.cloud.nacos.config.prefix.

# 若不指定,默认采用应用名的方案
spring.application.name=cloud-producer-server

# 手动指定配置的dataID前缀标识
# spring.cloud.nacos.config.prefix=cloud-producer-server-config

② actif : configurez l'environnement d'exploitation, qui est le profil correspondant à l'environnement actuel.

Remarque : Lorsque spring.profiles.active est vide, le connecteur correspondant "-" n'existera pas non plus et le format de raccordement de dataId devient ${prefix}.${file-extension}

# dev表示开发环境
spring.profiles.active=dev

③ file-exetension : le type de fichier de configuration, la valeur par défaut est properties, il peut également être configuré via l'élément de configuration spring.cloud.nacos.config.file-extension, les types actuellement pris en charge sont TEXT, JSON, XML, YAML, HTML, Propriétés

# 指定配置文件类型为yaml文件
spring.cloud.nacos.config.file-extension=yaml

④ Configuration finale :

        Après les trois premières étapes, nous avons finalement ajouté un nouveau fichier de configuration à la console du centre de configuration nacos : cloud-producer-server.yaml

2.2. Isolement de l'environnement - espace de noms Espace de noms :

        Nacos introduit le concept d'espace de noms pour gérer et isoler les configurations et les services multi-environnements. Par exemple, vous pouvez avoir trois environnements différents : l'environnement de développement local dev, l'environnement de test test et l'environnement de production prod, puis vous pouvez créer trois espaces de noms différents pour distinguer différents environnements. Créé comme suit :

 Une fois la création terminée, vous pouvez voir différents espaces de noms sur la liste de configuration de la console Nacos, comme indiqué ci-dessous :

        Après avoir créé avec succès un nouvel espace de noms, vous pouvez configurer l'ID de l'espace de noms dans le fichier de configuration de springboot pour passer à l'espace de noms correspondant et obtenir le fichier de configuration dans l'espace correspondant, mais si aucune configuration d'espace de noms n'est spécifiée, la configuration par défaut est Is in l'espace public, la façon de spécifier l'espace de noms est la suivante :

# 对应创建的命名空间的ID,此处对应的是dev命名空间
cloud.nacos.config.namespace=483bb765-a42d-4112-90bc-50b8dff768b3

2.3. Regroupement de groupes d'isolement d'entreprises :

        Le groupe peut également réaliser la fonction d'isolation de l'environnement, mais le but de la conception de groupe est de regrouper différents services dans le même environnement et de diviser les fichiers de configuration de différents microservices dans le même groupe. Si Nacos ne spécifie pas le groupe, la valeur par défaut Le groupement est DEFAULT_GROUP.

        S'il n'y a pas de groupe, imaginez ce scénario : il existe deux microservices, l'un est le système de commande et l'autre est le système utilisateur, mais ils ont la même configuration, telle que datasource-url, alors comment faire la distinction ? C'est là que les groupes sont utiles. Dans le scénario ci-dessus, le système de commande et le système utilisateur peuvent être divisés en un groupe, tel que ORDER_GROUP, USER_GROUP, bien sûr, il s'agit d'un regroupement relativement fin, et plusieurs microservices peuvent également être divisés en un groupe selon l'entreprise de l'entreprise.

        Ensuite, montrons comment spécifier des groupes lors de la création d'un jeu de configuration et lors de l'intégration. Dans l'exemple précédent, le nouveau jeu de configuration spécifie le groupe Groupe aux emplacements suivants :

 Groupe suivant dans le fichier application.properties :

spring.cloud.nacos.config.namespace=483bb765-a42d-4112-90bc-50b8dff768b3

3. Résumé :

Il est très simple pour Nacos d'implémenter la gestion de la configuration et l'actualisation dynamique de la configuration.Les étapes sont résumées comme suit :

  • ① Ajoutez la dépendance spring-cloud-starter-alibaba-nacos-config correspondante
  • ② Importer la configuration à l'aide de l'annotation native @Value()
  • ③ Utilisez l'annotation native @RefreshScope pour actualiser la configuration
  • ④ Faites un bon travail d'isolation de configuration multi-environnement (espace de noms) et d'isolation de configuration d'entreprise différente (groupe) en fonction de vos propres scénarios d'entreprise

4. Paramétrage partagé :

        Lorsque le nombre de nos microservices augmente, il est obligé d'avoir la même configuration. A ce moment, nous pouvons extraire la même configuration que la configuration commune dans le projet, comme les informations de source de données dans le cluster, les informations de configuration du log et nacos également. Cette façon d'écrire plusieurs ensembles de configuration dans un seul centre de configuration est prise en charge.

(1) Nous créons deux fichiers avec les ID de données db.yaml et log.yaml dans nacos.

(2) Ajouter du contenu de configuration au fichier de configuration respectivement

(3) Ajoutez la configuration nacos suivante au projet Springboot :

spring:
  cloud:
    nacos:
      config:
        extension-configs[0]:
          data-id: db.yaml
          # 默认为DEFAULT_GROUP
          group: DEFAULT_GROUP
          # 是否动态刷新,默认为false
          refresh: true
        extension-configs[1]:
          data-id: log.yaml
          group: DEFAULT_GROUP
          refresh: true

Afin de configurer plus clairement les identifiants de données partagés entre plusieurs applications, la recommandation officielle est d'utiliser des configurations partagées, la configuration est la suivante :

spring:
  cloud:
    nacos:
      config:
        shared-configs[0]:
          data-id: db.yaml
          # 默认为DEFAULT_GROUP
          group: DEFAULT_GROUP   
          # 是否动态刷新,默认为false
          refresh: true   
        shared-configs[1]:
          data-id: log.yaml
          group: DEFAULT_GROUP
          refresh: true

(4) Réflexion : Comment sélectionner nacos lorsque la même configuration apparaît dans ces deux fichiers ?

        Lorsque plusieurs ID de données ont la même configuration en même temps, leur relation de priorité est spring.cloud.nacos.config.extension-configs[n].data-id où plus la valeur de n est grande, plus la priorité est élevée.

Remarque : La valeur de spring.cloud.nacos.config.extension-configs[n].data-id doit avoir une extension de fichier. L'extension de fichier peut prendre en charge les propriétés et yaml/yml. À l'heure actuelle, la configuration de spring.cloud.nacos.config.file-extension n'a aucun effet sur l'extension de fichier d'ID de données de la configuration d'extension personnalisée.

(5) Configurez la priorité de chargement de différentes manières :

        Nacos Configuration Center fournit actuellement les trois fonctionnalités de configuration suivantes pour extraire les configurations associées de Nacos. Lorsque les trois méthodes sont utilisées ensemble, l'une de leurs relations prioritaires est : A < B < C :

  • R : Prise en charge de plusieurs configurations d'ID de données partagées via spring.cloud.nacos.config.shared-configs[n].data-id
  • B : Prise en charge de la configuration de plusieurs identifiants de données étendus via spring.cloud.nacos.config.extension-configs[n].data-id
  • C : Générer automatiquement des configurations d'ID de données associées via des règles internes associées (spring.cloud.nacos.config.prefix, spring.cloud.nacos.config.file-extension, spring.cloud.nacos.config.group)

Article de référence :

SpringBoot2.X intègre Nacos comme centre de configuration

Cinquante-cinq images vous disent à quel point Nacos, l'âme passeur des microservices, est fort ?

Je suppose que tu aimes

Origine blog.csdn.net/a745233700/article/details/122916208
conseillé
Classement