Introdução
O Apollo é um sistema de configuração centralizada desenvolvido pela Ctrip, projetado para gerir de forma unificada as configurações de diferentes ambientes e clusters em aplicações distribuídas. Ele permite atualizações em tempo real e oferece recursos como controle de acesso e governança de processos, sendo ideal para cenários de microsserviços.
Comparação com Spring Cloud Config
Em ambientes de produção, o Apollo apresenta vantagens significativas em relação ao Spring Cloud Config, como suporte nativo a push de configurações e melhor integração com ecossistemas de microsserviços.
Instalação do Centro de Configuração Apollo
Para configurar o Apollo, consulte a documentação oficial no GitHub. O processo envolve a implantação dos módulos de administração e serviço, seguido pela inicialização dos componentes. Após a conclusão, acesse a interface de gerenciamento via navegador.
Exemplo de Configuração Inicial
Após a instalação, faça login na interface com credenciais padrão e navegue até a aplicação de exemplo para visualizar as configurações demonstrativas.
Integração com Spring Boot
Criar um projeto Spring Boot para utilizar o Apollo requer a adição de dependências específicas e configurações no arquivo de propriedades.
Dependências Maven
Inclua o cliente Apollo e bibliotecas auxiliares no arquivo pom.xml:
<dependencies>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
Configuração do Aplicativo
No arquivo application.yml, defina parâmetros essenciais:
server:
porta: 8761
app:
identificador: springboot-apollo
apollo:
meta: http://127.0.0.1:8080
bootstrap:
habilitado: true
carregamento-adiantado:
habilitado: true
logging:
nivel:
com:
exemplo:
controlador: debug
Explicação das configurações:
- app.identificador: Identificador único da aplicação no centro de configurações.
- apollo.bootstrap.habilitado: Injeta as configurações gerenciadas no contexto Spring durante a inicialização.
- apollo.bootstrap.carregamento-adiantado.habilitado: Carrega as configurações Apollo antes do sistema de log.
- logging.nivel.com.exemplo.controlador: Ajusta o nível de log para demonstrações dinâmicas.
Controlador de Exemplo
Crie um controlador REST simples para testar a integração:
@RestController
public class ControladorSaudacao {
private static final Logger logger = LoggerFactory.getLogger(ControladorSaudacao.class);
@Value("${server.porta}")
private String portaServidor;
@GetMapping("/ola")
public String saudar(String nome) {
logger.debug("Mensagem de depuração...");
logger.info("Mensagem informativa...");
logger.warn("Mensagem de alerta...");
return "Olá " + nome + ", vindo da porta: " + portaServidor;
}
}
Classe de Inicialização
Ative o suporte ao Apollo na classe principal:
@SpringBootApplication
@EnableApolloConfig
public class AplicacaoApolloSpring {
public static void main(String[] args) {
SpringApplication.run(AplicacaoApolloSpring.class, args);
}
}
Configuração no Centro de Administração
Após executar a aplicação, configure o projeto no painel do Apollo.
Criação do Projeto
Acesse a interface de gerenciamento, selecione a opção para criar um novo projeto e forneça detalhes como departamento, AppId e nome. O AppId deve corresponder ao definido na aplicação.
Adição de Propriedades
Adicione propriedades que serão gerenciadas, como server.porta. Após inserir os valores, publique as configurações para torná-las ativas.
Teste de Configurações Dinâmicas
Modifique o valor de server.porta no centro de configurações e publique a alteração. Ao chamar o endpoint da aplicação, a porta retornada pode refletir a mudança após um reinício do aplicativo, demonstrando o carregamento das configurações atualizadas.
Monitoramento de Alterações de Configuração
Para atualizar configurações como níveis de log sem reiniciar a aplicação, implemente um listener que reaja a mudanças no Apollo.
Classe de Atualização de Log
Crie uma classe para monitorar e aplicar mudanças nos níveis de log:
@Configuration
public class ConfiguracaoLog {
private static final Logger logger = LoggerFactory.getLogger(ConfiguracaoLog.class);
private static final String PREFIXO_LOG = "logging.nivel.";
@Autowired
private LoggingSystem sistemaLog;
@ApolloConfig
private Config configApollo;
@ApolloConfigChangeListener
private void aoMudarConfiguracao(ConfigChangeEvent evento) {
atualizarNiveisLog();
}
@PostConstruct
private void atualizarNiveisLog() {
Set<String> chaves = configApollo.getPropertyNames();
for (String chave : chaves) {
if (StringUtils.containsIgnoreCase(chave, PREFIXO_LOG)) {
String nivelStr = configApollo.getProperty(chave, "info");
LogLevel nivel = LogLevel.valueOf(nivelStr.toUpperCase());
String pacote = chave.replace(PREFIXO_LOG, "");
sistemaLog.setLogLevel(pacote, nivel);
logger.info("Configuração aplicada: {}={}", chave, nivelStr);
}
}
}
}
Pontos-chave:
- @ApolloConfig: Injeta a instância de configuração do Apollo.
- @ApolloConfigChangeListener: Escuta eventos de mudança e aciona a atualização.
- O método
atualizarNiveisLogitera sobre as propriedades relevantes e ajusta os níveis de log dinamicamente.
Validação da Atualização Dinâmica
Com o código de listener ativo, altere o nível de log no centro de configurações de debug para warn e publique. Ao acessar o endpoint, apenas logs de nível warn serão exibidos, confirmando a atualização em tempo real sem reinício da aplicação.