Introdução detalhada ao uso do centro de configuração Nacos

        O último artigo apresentou o uso do Nacos como centro de registro . Além disso, o Nacos também pode ser usado como centro de configuração. Em seguida, este artigo apresentará o uso básico do Nacos como centro de configuração. Primeiro, vamos entender por que precisamos usar o centro de configuração.

1. Por que você precisa de um centro de configuração:

Antes de não haver um centro de configuração, a configuração tradicional do aplicativo tem os seguintes pontos problemáticos:

(1) Usando a configuração estática local, o desempenho em tempo real não pode ser garantido: A modificação da configuração é inflexível e requer um longo ciclo de teste e liberação e não pode ser notificada ao cliente o mais rápido possível. desempenho de tempo, como configuração de comutação em espera ativa. Ou você precisa modificar a configuração em caso de falha. Nesse caso, a configuração estática tradicional ou o método de relançamento é usado para configurar a configuração, portanto, a velocidade de resposta é muito lento, e o risco do negócio é muito grande.

(2) É fácil causar acidentes de produção: Por exemplo, ao publicar, é fácil trazer a configuração do ambiente de teste para produção, causando acidentes de produção.

(3) A configuração é dispersa e o formato não é padrão: alguns usam o formato de propriedades, alguns usam o formato xml, outros armazenam o BD, a equipe tende a construir suas próprias rodas, e existem vários métodos.

(4) A configuração não possui funções de auditoria de segurança, controle de versão e controle de permissão de configuração: quem? em que momento? Qual configuração foi modificada? Não há como rastrear e não há como reverter para a versão anterior a tempo se houver um problema; não há como autenticar e autorizar a liberação de alterações de configuração, e todos podem modificar e liberar a configuração .

        O centro de configuração é diferente da forma tradicional de distribuição de informações de configuração para todos os cantos do sistema, e gerencia central e uniformemente os arquivos de configuração no sistema, em vez de gerenciar servidores individuais um a um. Então, qual é o benefício de fazer isso?

(1) Através do centro de configuração, a configuração pode ser padronizada e o formato pode ser unificado

(2) Quando as informações de configuração são alteradas, a modificação entra em vigor em tempo real, e as alterações correspondentes podem ser detectadas automaticamente sem reiniciar o servidor, e as novas alterações podem ser enviadas aos programas correspondentes de maneira unificada para responder rapidamente às alterações . Por exemplo, uma determinada função é apenas para usuários em uma determinada região e uma determinada função está disponível apenas durante o período de grande promoção. Depois de usar o centro de configuração, apenas o pessoal relevante precisa ajustar dinamicamente os parâmetros no centro de configuração, basicamente em tempo real ou quase-real. Ajuste o negócio correspondente.

(3) O problema também pode ser rastreado através da função de auditoria

Em segundo lugar, o uso do centro de configuração Nacos:

        Existem três soluções principais para o centro de configuração em microsserviços: Nacos, Apollo e Config+Bus. No entanto, neste artigo, apresentamos principalmente o uso do Nacos como centro de configuração. Os leitores interessados ​​nos outros dois métodos podem consultar o Internet sozinhos.

1. Springboot integra o centro de configuração Nacos:

(1) Primeiro, declaramos as informações da versão do projeto:

<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) Adicione a dependência maven do centro de configuração do nacos:

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

(3) Adicione a configuração relevante do centro de configuração nacos no arquivo 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) Crie um novo conjunto de configurações com DataID cloud-producer-server-dev.yaml no console do nacos:

Por que o DataID é chamado de cloud-producer-server-dev.yaml será descrito abaixo

 (5) Escreva uma classe de teste:

//配置发布之后,动态刷新配置
@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) Iniciar a verificação do serviço:

        Inicie o projeto, visite a interface http://localhost:8080/provider/getNacosConfig , você pode ver que as informações de configuração do centro de configuração do nacos entraram em vigor e foram obtidas com sucesso

(7) Verifique a configuração de atualização dinâmica:

        A atualização dinâmica da configuração é uma das principais funções do centro de configuração. Suponha que eu precise modificar o valor de user.name agora, vou alterar diretamente a configuração no Nacos para entrar em vigor? Vamos tentar modificar diretamente a configuração no Nacos para "zhangsan", conforme mostrado abaixo:

 Não reinicie o projeto e revisite a interface neste momento, os resultados são os seguintes:

        Descobrimos que a configuração foi atualizada dinamicamente, por que isso acontece? Na verdade, é devido ao efeito de adicionar a anotação @RefreshScope à classe.

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

2. Os principais conceitos de Nacos:

2.1、ID de dados:

(1) Formato de nomenclatura do ID de dados:

        Anteriormente, demonstramos a criação de um novo conjunto de dados com o DataID cloud-producer-server-dev.yaml no console nacos. Então, o que é esse ID de dados? O ID de dados é o identificador exclusivo de um conjunto de configurações. Um aplicativo pode conter vários conjuntos de configurações e cada conjunto de configurações precisa ser identificado por um nome significativo. Então, como o Data ID obtém o valor? O formato popular é "prefix-environment-extension", da seguinte forma:

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

① prefixo: prefixo, o padrão é o valor de spring.application.name, ou pode ser configurado através do item de configuração spring.cloud.nacos.config.prefix.

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

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

② ativo: Configure o ambiente operacional, que é o perfil correspondente ao ambiente atual.

Observação: quando spring.profiles.active estiver vazio, o conector "-" correspondente também não existirá e o formato de emenda de dataId se tornará ${prefix}.${file-extension}

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

③ file-exetension: O tipo do arquivo de configuração, o padrão é properties, também pode ser configurado através do item de configuração spring.cloud.nacos.config.file-extension, os tipos atualmente suportados são TEXT, JSON, XML, YAML, HTML, Propriedades

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

④ Configuração final:

        Após as três primeiras etapas, finalmente adicionamos um novo arquivo de configuração ao console do centro de configuração do nacos: cloud-producer-server.yaml

2.2. Isolamento do ambiente - namespace Namespace:

        A Nacos apresenta o conceito de namespace para gerenciar e isolar configurações e serviços de vários ambientes. Por exemplo, você pode ter três ambientes diferentes: o ambiente de desenvolvimento local dev, o ambiente de teste test e o ambiente de produção prod, então você pode criar três Namespaces diferentes para distinguir ambientes diferentes. Criado da seguinte forma:

 Após a conclusão da criação, você pode ver diferentes namespaces na lista de configuração do console do Nacos, conforme mostrado abaixo:

        Depois de criar com sucesso um novo namespace, você pode configurar o id do namespace no arquivo de configuração do springboot para alternar para o namespace correspondente e obter o arquivo de configuração no espaço correspondente, mas se nenhuma configuração de namespace for especificada, a configuração padrão será Is in o espaço público, a maneira de especificar o namespace é a seguinte:

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

2.3. Agrupamento de grupos de isolamento de negócios:

        O grupo também pode atingir a função de isolamento do ambiente, mas o objetivo do design do grupo é agrupar diferentes serviços no mesmo ambiente e dividir os arquivos de configuração de diferentes microsserviços no mesmo grupo. Se o Nacos não especificar o grupo, o padrão O agrupamento é DEFAULT_GROUP.

        Se não houver grupo, imagine este cenário: existem dois microsserviços, um é o sistema de pedidos e o outro é o sistema do usuário, mas eles possuem a mesma configuração, como datasource-url, então como distinguir? É aqui que os Grupos são úteis. No cenário acima, o sistema de pedidos e o sistema do usuário podem ser divididos em um grupo, como ORDER_GROUP, USER_GROUP, é claro, esse é um agrupamento relativamente refinado e vários microsserviços também podem ser divididos em um grupo de acordo com o negócio do empreendimento.

        Em seguida, vamos demonstrar como especificar grupos ao criar um conjunto de configurações e ao integrar. No exemplo anterior, o novo conjunto de configurações especifica o grupo Group nos seguintes locais:

 Próximo grupo no arquivo application.properties:

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

3. Resumo:

É muito simples para o Nacos implementar o gerenciamento de configuração e a atualização dinâmica da configuração. As etapas são resumidas da seguinte forma:

  • ① Adicione a dependência spring-cloud-starter-alibaba-nacos-config correspondente
  • ② Importe a configuração usando a anotação nativa @Value()
  • ③ Use a anotação nativa @RefreshScope para atualizar a configuração
  • ④ Faça um bom trabalho de isolamento de configuração de vários ambientes (Namespace) e isolamento de configuração de negócios diferente (Grupo) de acordo com seus próprios cenários de negócios

4. Configuração compartilhada:

        Quando o número de nossos microsserviços aumenta, ele é obrigado a ter a mesma configuração. Neste momento, podemos extrair a mesma configuração que a configuração comum no projeto, como as informações da fonte de dados no cluster, as informações de configuração do log e nacos também.Esta forma de escrever vários conjuntos de configuração em um centro de configuração é suportada.

(1) Criamos dois arquivos com IDs de dados db.yaml e log.yaml em nacos.

(2) Adicione algum conteúdo de configuração ao arquivo de configuração, respectivamente

(3) Adicione a seguinte configuração nacos ao projeto 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

Para configurar de forma mais clara os IDs de dados compartilhados entre vários aplicativos, a recomendação oficial é usar shared-configs, a configuração é a seguinte:

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) Pensando: Como selecionar nacos quando a mesma configuração aparece nesses dois arquivos?

        Quando vários IDs de dados têm a mesma configuração ao mesmo tempo, seu relacionamento de prioridade é spring.cloud.nacos.config.extension-configs[n].data-id, onde quanto maior o valor de n, maior a prioridade.

Observação: o valor de spring.cloud.nacos.config.extension-configs[n].data-id deve ter uma extensão de arquivo. A extensão de arquivo pode suportar propriedades e yaml/yml. Neste momento, a configuração de spring.cloud.nacos.config.file-extension não tem efeito na extensão do arquivo Data Id da configuração de extensão personalizada.

(5) Configure a prioridade de carregamento de diferentes maneiras:

        Atualmente, o Nacos Configuration Center fornece os três recursos de configuração a seguir para extrair configurações relacionadas do Nacos. Quando os três métodos são usados ​​juntos, um de seus relacionamentos de prioridade é: A < B < C:

  • R: Suporte a várias configurações de ID de dados compartilhados por meio de spring.cloud.nacos.config.shared-configs[n].data-id
  • B: Suporte à configuração de vários IDs de dados estendidos por meio de spring.cloud.nacos.config.extension-configs[n].data-id
  • C: Gerar automaticamente configurações de ID de dados relacionadas por meio de regras relacionadas internas (spring.cloud.nacos.config.prefix, spring.cloud.nacos.config.file-extension, spring.cloud.nacos.config.group)

Artigo de referência:

SpringBoot2.X integra Nacos como centro de configuração

Cinquenta e cinco fotos mostram o quão forte é Nacos, o barqueiro da alma dos microsserviços?

Acho que você gosta

Origin blog.csdn.net/a745233700/article/details/122916208
Recomendado
Clasificación