Visão geral
Suponha que exista um requisito agora:
Nosso aplicativo é implantado em 10 máquinas. Quando ajustamos um determinado parâmetro de configuração, não precisamos reiniciar a máquina. 10 máquinas podem obter automaticamente a configuração mais recente.
Como alcançá -lo? Existem muitos tipos, como:
1. Coloque a configuração em um banco de dados e cada vez que o aplicativo lê a configuração diretamente do banco de dados. Dessa forma, precisamos apenas fazer uma alteração de banco de dados e atualizar as informações de configuração mais recentes para o banco de dados. Dessa forma, não importa quantos aplicativos sejam, pois todos obtêm informações de configuração do mesmo banco de dados, eles podem naturalmente obter a configuração mais recente.
2. Cada máquina fornece uma interface UpdateConfig que atualiza as informações de configuração. Quando é necessário modificar a configuração, a interface UpdateConfig do servidor é chamada de uma por uma.
3. Use o Redis para implementá -lo e coloque as informações de configuração no Redis, mas, dessa maneira, você deve lê -lo sempre, que possui mais solicitações de rede.
Os três métodos acima são os mais fáceis de pensar e são fáceis de fazer, mas é claro que existem muitas desvantagens. Embora existam muitas deficiências, algumas empresas tradicionais fazem isso.
Nas empresas de Internet, basicamente nunca vi ninguém tocando assim, todas elas usam centros de configuração distribuídos. Use código aberto ou implemente -o sozinho. Atualmente, existem muitos centros de configuração distribuídos de código aberto, e o Spring Cloud Config é o melhor deles. Em seguida, usaremos o Spring Cloud Config para implementar um centro de configuração distribuído.
Se deve usar a versão mais recente da Spring Boot 2.0
Eu costumava usar o mais recente Spring Cloud 2.0 para fazer uma demonstração distribuída que é o Centro de Configuração. Eu pensei que era simples, mas demorou um dia inteiro para fazê -lo. Existem várias razões:
1. O documento correspondente da Spring Cloud não foi completamente atualizado e há um problema e não pode ser encontrado no documento;
2. Atualmente, existem poucas empresas usando a versão 2.0 e não há artigos práticos específicos na Internet. Depois que o problema foi quebrado, o Baidu não conseguiu encontrar uma solução. É basicamente difícil para o Google encontrar soluções, todas as quais são fragmentos de conhecimento esporádico;
3. Existem algumas pequenas alterações na configuração e barramento na versão 2.0 e, se ainda for feita de acordo com a versão 1.5.x, não funcionará.
Com base nos motivos acima, é recomendável usar a versão 1.5.x para ser mais confiável. O artigo a seguir será introduzido na versão a seguir:
Botagem de primavera:
1.5.2.Release
O uso da nuvem de primavera correspondente:
Dalston.release
Construir Spring Cloud Config Server
Se você deseja apenas gerenciar a configuração uniformemente pela Spring Cloud Config e não deseja estar altamente disponível no Centro de Configuração por enquanto, você só precisa de componentes de configuração e barramento. No entanto, se você deseja garantir alta disponibilidade, também deve usar o componente de descoberta de registro da Spring Cloud.
Além da configuração e do barramento, também precisamos usar o Git. Porque o Spring Cloud Config usa o Git para gerenciamento de versão.
É muito simples fazer um centro de configuração com base na configuração da Spring Cloud, ela é feita em apenas algumas etapas pequenas.
【1】 Introduzir componentes de configuração e barramento
<dependency><groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>
【2】 A classe de inicialização usa @enableConfigserver anotação
pacote spring.cloud.config; importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootApplication; importação de shubring.springframework.config.erverver.enAconAcnicSerVerver; ConfigApplication {public static void main (string [] args) {springapplication.run (configapplication.class, args); }}【3】 Application.yml Arquivo configura RabbitMQ e GIT Repositórios
Servidor: Porta: 8040Spring: Aplicativo: Nome: Spring-Cloud-Config-Server Cloud: Config: Servidor: Git: Uri: https://gitlab.xxxxxx.com/config/xxxxxx.git Searchpaths: Username: XXXXX senha: xxxxxxxxxxx.gitspaths: username: xxxxx senha: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.gitmil: username: xxxxx senha: xxxxxxxxxxxx.gitmks: username: xxxxx senha: xxxxxxxxxxxxxxxx.gitshpaths: username: xxxxx. Senha: Guestanagement -Gerenciamento: Segurança: Ativado: Falso
O RabbitMQ está configurado porque o componente do barramento precisa usá -lo para notificar o cliente e as alterações de configuração são feitas. Além disso, lembre -se de usar
Gerenciamento: Segurança: Ativado: Falso
A verificação será fechada e a próxima operação sempre relatará um erro de autorização.
O centro de configuração do servidor foi concluído. Agora você pode fazer um pequeno experimento no servidor e enviar um arquivo de demonstração. O conteúdo do arquivo é o seguinte:
endereço = olá
Então use
http: // localhost: 8040/demonstração/dev
Se saída
{"endereço": "Hello"}Isso significa que a interação entre o Spring Cloud Config e o Git está OK.
Centro de Configuração de Acesso ao Cliente
Nossos objetivos:
Depois que as informações de configuração são modificadas e enviadas ao Git, todos os clientes conectados à Spring Cloud Config receberão notificações imediatamente e obterão as informações de configuração mais recentes.
A seguir, descreve como atingir esse objetivo.
O cliente precisa apenas fazer algumas pequenas etapas para concluir a ação de acesso.
【1】 Introduzir dependências
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <GroupId> org.springframework.cloud </frupiD> <ArtifactId> Spring-Cloud-Starter-Config </ArtifactId> </Dependency> <pendence> <puperid> org.springframework.cloud </frupid> <stifactId> Spring-Cloud-Starter-Bus-AMQP </ArtiftfactiM> Spring-Cloud-Bus-Bus-AMQP </Artift>
A introdução do Spring-Boot-Starter-Web é apenas para experimentação.
【2】 Configurar o RabbitMQ e introduzir URLs no centro de configuração
Application.Properties
spring.application.name = spring-cloud-config-client1server.port = 8042Management.Security.Enabled = Falsespring.rabbitmq.host = 127.0.1spring.rabbitmq.port = 5672spring.rabbitmq.USERRO
bootstrap.properties
spring.cloud.config.name = Demospring.cloud.config.profile = devspring.cloud.config.label = masterspring.cloud.config.uri = http: // lochost: 8040/
Há três pontos para prestar atenção:
1. Verificação próxima: gerenciamento.security.enabled = false
2. A configuração relacionada à configuração da nuvem de primavera deve ser colocada no bootstrap.properties
3. Use spring.cloud.config.uri para especificar o endereço do centro de configuração
Além disso, para o cliente, a classe de inicialização não precisa adicionar anotações relacionadas à configuração e barramento .
Depois de chegar a esse cliente, podemos usar um controlador para começar a experimentar.
pacote springcloudConfig.client; importar org.springframework.beans.factory.annotation.value; importação org.springframework.cloud.context.config.annotation.refrescope; importação org.springframe.web.bind.annotation.requestmapping; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importantes; importestMapping; ImportMapping; org.springframework.web.bind.annotation.restcontroller;@RestController@refreshScopepublic Classe Hellocontroller {@Value ("$ {endereço}") Administração de sequência privada; @RequestMapping ("/endereço") public string getAddress () {return this.address; }}Supondo que o hellocontrolador acima precise usar a configuração de endereço, você só precisa usar as anotações @RefreshScope e @Value.
@RefreshScopepublic Classe Hellocontroller {} @Value ("$ {endereço}") endereço de sequência privada;Para verificar se o cliente pode obter as informações mais recentes de configuração, forneça um
@RequestMapping ("/endereço") public string getAddress () {return this.address; }método.
Vamos modificar o arquivo Demo-Dev.Properties e alterar o valor para
endereço = hello update
E envie -o para Git. Neste momento, chamamos a interface GetAddress
http: // localhost: 8041/endereço
Descobri que não recebi o valor mais recente. Isso porque, após a ação de empurrar para o GIT, não notificamos o barramento da Spring Cloud. Você pode usar o Postman para fazer uma solicitação de postagem e ligar para a seguinte interface para notificar o barramento.
http: // localhost: 8040/ônibus/atualização
Depois que essa interface for chamada com sucesso, o barramento usará o RabbitMQ para notificar todos os clientes de que a configuração foi atualizada.
Atenção especial:
Estamos chamando a interface /barramento /atualização do servidor, não a interface /barramento /atualização do cliente.
Se você precisar ligar para a interface /barramento /atualização no servidor sempre que enviar, isso é muito problemático. Você pode usar webhook para ajudar.
Se você estiver usando o novo GitLab, basta clicar em [Configurações] no projeto e clique em [integrações] para configurar o webhook, conforme mostrado na figura abaixo:
Preencha o URL no endereço da interface /barramento /atualização do servidor de centro de configuração e clique em [Adicionar webhook].
Comparação com a Apollo da CTRIP
A coisa requintada sobre a Spring Cloud Config é que sua configuração é armazenada no Git, que naturalmente isola a modificação da configuração, permissões, versões e outros problemas. Esse design torna o Spring Cloud Config muito simples em geral, mas também traz algum inconveniente.
Vamos tentar fazer um resumo simples:
| Pontos funcionais | Apollo | Spring Cloud Config | Observação |
|---|---|---|---|
| Interface de configuração | Uma interface gerencia diferentes ambientes e diferentes configurações de cluster | Nenhum, precisa operar através do Git | |
| Configure o tempo efetivo | tempo real | Reiniciar entra em vigor ou a atualização manual entra em vigor | Spring Cloud Config precisa passar no Webhook Git, além de uma fila de mensagens adicional para apoiar o efeito em tempo real |
| Gerenciamento de versão | Histórico de liberação e botões de reversão são fornecidos diretamente na interface | Nenhum, precisa operar através do Git | |
| Lançamento em escala de cinza | apoiar | Não suportado | |
| Autorização, auditoria, auditoria | Suportado diretamente na interface e suporta a separação de permissões de modificação e publicação | Precisa ser definido através do repositório Git e não suporta a separação de modificação e permissão de liberação | |
| Monitoramento da configuração da instância | É fácil ver quais clientes estão usando quais configurações | Não suportado | |
| Configuração para obter desempenho | Rápido, acessar através do banco de dados e suporte de cache | Mais lento, precisam ler do repositório do clone git e depois do sistema de arquivos | |
| Suporte ao cliente | Apoie nativamente todos os aplicativos Java e .NET, forneça API para apoiar outros aplicativos de idiomas e também suporta a anotação da primavera para obter a configuração | Apoie as aplicações de primavera e forneça anotação para obter a configuração | Apollo tem uma ampla gama de aplicações |
Pessoalmente, recomendo o uso da Spring Cloud Config, que é muito leve e ativa na comunidade. É fácil encontrar uma solução ao encontrar problemas. Além disso, acho que a diferença entre a Apollo e a Spring Cloud Config é apenas que não há interface. A interface pode ser feita e podemos fazê -lo através do Git, mas a experiência do usuário não é tão boa assim.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.