Ao migrar de um centro de configuração Apollo autogerenciado para o Alibaba Cloud Microservices Engine (MSE) Nacos, transfira dois componentes: os dados de configuração e o código da aplicação que os consome. Este guia orienta você em ambas as etapas, desde a exportação das configurações do Apollo até a verificação da aplicação migrada.
A migração segue seis etapas:
Exportar as configurações do Apollo
Converter o arquivo exportado para o formato do Nacos
Importar as configurações para o MSE Nacos
Atualize a dependência do Maven
Atualize o código da aplicação
Alternar o endpoint de configuração
Mapeamento de conceitos do Apollo para o Nacos
O Apollo e o Nacos organizam as configurações de maneiras diferentes. Antes de começar, entenda como os dois modelos se relacionam.
|
Parâmetro do Apollo |
Parâmetro do Nacos |
Observações |
|
env |
instância |
Cada ambiente do Apollo corresponde a uma instância do Nacos ou a um namespace separado dentro de uma instância. |
|
appId |
appName |
Identifica a aplicação. |
|
cluster |
group |
Mapeamento direto. |
|
{appId}.{namespace}.{format} |
dataId |
Os três campos do Apollo são concatenados para formar o |
Configurações em ambientes diferentes do Apollo podem ser mapeadas para instâncias distintas do Nacos ou para namespaces diferentes dentro de uma única instância. Escolha a abordagem mais adequada ao seu modelo de implantação.
Pré-requisitos
Antes de iniciar, certifique-se de ter:
Uma instância do MSE Nacos Professional Edition. Para obter instruções, consulte Crie um mecanismo Nacos
Acesso ao console do Apollo autogerenciado
Etapa 1: Exportar configurações do Apollo
Exporte suas configurações do Apollo usando um dos métodos a seguir.
Método 1: Exportar pelo console do Apollo (recomendado)
Faça login no console do Apollo autogerenciado. Neste exemplo, acesse o console do Apollo em
http://81.68.181.139.Na página My Applications, clique em no nome da aplicação de destino.
No canto superior direito da página de detalhes da aplicação, selecione Administrator Tools > Configure Export and Import.
Na página Configure Export and Import, selecione o ambiente de exportação e clique em Export.
Exporte cada ambiente separadamente. Cada exportação gera um arquivo .zip correspondente àquele ambiente.
Método 2: Exportar executando uma consulta SQL
Caso sua versão do Apollo não ofereça suporte à exportação de arquivos, consulte o banco de dados diretamente. Execute a instrução SQL a seguir e salve os resultados como um arquivo .json ou .xlsx:
SELECT DISTINCT
a.NamespaceId,
b.NamespaceName,
c.`Comment` AS 'NamespaceDesc',
b.AppId,
b.ClusterName,
a.Key,
a.Type,
a.Value,
a.Comment,
a.LineNum
FROM ITEM a
LEFT JOIN Namespace b ON a.NamespaceId = b.id
LEFT JOIN AppNamespace c ON c.Name = b.NamespaceName
WHERE a.IsDeleted = 0
ORDER BY a.NamespaceId, a.LineNum;
Etapa 2: Converter o arquivo exportado
Converta o arquivo exportado na Etapa 1 (.zip, .json ou .xlsx) para um formato compatível com a importação no MSE Nacos.
-
Baixe a ferramenta de conversão de formato:
curl -O https://msesync.oss-cn-hangzhou.aliyuncs.com/ApolloConfigTransfer.jar -
Execute a ferramenta de conversão. Substitua
<exported-file-path>pelo caminho completo do arquivo exportado do Apollo:java -DsourceFilePath=<exported-file-path> -jar ApolloConfigTransfer.jar Após a conclusão da execução, um arquivo chamado
nacos_config_import_{original-filename}_{timestamp}.zipaparecerá no diretório atual. Esse arquivo está pronto para importação.
Etapa 3: Importar configurações para o MSE Nacos
Faça login no console do MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, selecione Microservices Registry > Instances. Clique em no nome da sua instância do Nacos.
No painel de navegação à esquerda, selecione Configuration Management > Configurations.
Selecione o namespace de destino na lista suspensa Namespace.
Clique em Import Configuration e faça upload do arquivo
.zipgerado na Etapa 2.
Após a conclusão da importação, suas configurações do Apollo estarão disponíveis no MSE Nacos.
Etapa 4: Atualize a dependência do Maven
Substitua a dependência do cliente Apollo pelo starter Spring Cloud Alibaba Nacos Config no seu arquivo pom.xml.
Antes (Apollo):
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>{apollo.version}</version>
</dependency>
Depois (Spring Cloud Alibaba Nacos):
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.10</version>
</dependency>
Compatibilidade de versões
Escolha a versão do spring-cloud-starter-alibaba-nacos-config compatível com a sua versão do Spring Cloud Alibaba:
|
Versão do Spring Cloud Alibaba |
Versão recomendada do starter Nacos Config |
|
2023.x |
2023.0.3.2 |
|
2022.x |
2022.0.0.2 |
|
2021.x |
2021.0.6.2 |
|
2.2.x |
2.2.11 |
Etapa 5: Atualize o código da aplicação
O Apollo oferece suporte a diversos padrões de configuração dinâmica. Substitua cada padrão pelo equivalente no Nacos conforme descrito abaixo.
Anotação @Value (nenhuma alteração necessária)
A anotação @Value funciona com o Spring Cloud Alibaba sem exigir mudanças no código. Adicione @RefreshScope ao bean para ative a atualização dinâmica:
@RestController
@RefreshScope
public class DemoController {
@Value("testKey")
String testKey = "value";
@RequestMapping("/valuekey")
public String getNacosTestKey() {
return testKey;
}
}
Substituir @ApolloConfig por @ConfigurationProperties
A anotação @ApolloConfig injeta automaticamente valores de propriedades em um bean do Spring. Substitua-a pela anotação padrão do Spring @ConfigurationProperties:
@Configuration
@ConfigurationProperties
public class CNStackInfoConfig {
private String name;
private int customerCount;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCustomerCount() {
return customerCount;
}
public void setCustomerCount(int customerCount) {
this.customerCount = customerCount;
}
}
Substituir a API Apollo Config por @NacosConfig
Se o seu código chama a API Apollo Config para obter valores de propriedades:
// Apollo Config API
ConfigService.getAppConfig().getProperty("testkey", "defaulyv1");
ConfigService.getAppConfig("namespace").getProperty("testkey", "defaulyv1");
Substitua por @NacosConfig e Properties.getProperty():
@NacosConfig(dataId = "appId1.application.properties", group = "group")
Properties nacosConfigProperties;
private void method() {
String value = nacosConfigProperties.getProperty("key", "defaultValue");
}
Substituir ApolloConfigChangeListener por @NacosConfigKeysListener
Caso seu código utilize @ApolloConfigChangeListener para reagir a alterações de configuração:
// Apollo listener
@ApolloConfigChangeListener(interestedKeyPrefixes = {"data."})
public void apolloNotify(ConfigChangeEvent configChangeEvent) {
System.out.println(configChangeEvent.changedKeys());
}
Substitua por @NacosConfigKeysListener:
// Nacos listener
@NacosConfigKeysListener(
dataId = "appId1.application.properties",
group = "group",
interestedKeyPrefixes = {"data."}
)
public void apolloNotify(ConfigChangeEvent configChangeEvent) {
System.out.println(configChangeEvent.changedKeys());
}
Para obter detalhes sobre o uso das anotações, consulte Anotações de centros de configuração Nacos para aplicações Spring Cloud.
Etapa 6: Alternar o endpoint de configuração
Substitua a configuração de bootstrap do Apollo pelo endpoint de configuração do Nacos.
Antes (Apollo):
## Apollo configurations
# Environment: -Dappllo.env={env}
apollo.meta=http://127.0.0.1:8070
apollo.bootstrap.enabled=true
# Namespaces to load
apollo.bootstrap.namespaces=application,namespace1
# Cluster
apollo.bootstrap.cluster=default
# Application ID
app.id=app1
Depois (Nacos):
# Import specific configurations by dataId and group
spring.config.import[0]=nacos:app1.application.properties?group=default&refreshEnabled=true
spring.config.import[1]=nacos:app1.namespace1.properties?group=default&refreshEnabled=true
# MSE Nacos endpoint
spring.cloud.nacos.config.server-addr=mse-xxx-p.nacos-ans.mse.aliyuncs.com
# MSE Nacos namespace (use the namespace ID from the MSE console)
spring.cloud.nacos.config.namespace=<namespace-id>
Substitua os seguintes espaços reservados pelos seus valores reais:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Endpoint da instância do MSE Nacos |
|
|
|
ID do namespace obtido no console do MSE |
|
Após atualize a configuração, reinicie a aplicação.
Verifique a migração
Depois de reiniciar a aplicação, valide o sucesso da migração:
Verifique o carregamento das configurações: Revise os logs de inicialização da aplicação. Confirme se as configurações foram carregadas a partir do endpoint do Nacos sem erros.
Validar a atualização dinâmica: Altere um valor de configuração no console do MSE Nacos. Verifique se a aplicação adota o novo valor sem necessidade de reinicialização.
Testar o comportamento da aplicação: Execute sua suíte de testes funcionais. Confirme se a aplicação se comporta conforme o esperado com as configurações migradas.
Monitore a aplicação por um período após a migração. Após confirme que tudo funciona corretamente, desative o centro de configuração Apollo autogerenciado.