このトピックでは、セルフマネージド Apollo 構成センターから Microservices Engine (MSE) Nacos 構成センターにアプリケーション構成を移行する方法について説明します。
前提条件
MSE Nacos Professional Edition インスタンスが作成されていること。 MSE Nacos インスタンスの作成方法の詳細については、「インスタンスの作成」をご参照ください。
移行の説明
次の表に、Apollo モデルと MSE Nacos モデルのパラメーターを示します。
Apollo モデル | MSE Nacos モデル |
|
|
このトピックでは、単一の Apollo 環境内のすべての構成が、次のマッピングルールに基づいて Nacos 名前空間にファイルとして移行されます。
異なる Apollo 環境の構成は、異なる Nacos インスタンスまたは Nacos インスタンスの異なる名前空間にマッピングできます。ビジネス要件に基づいて、いずれかのマッピング方法を使用できます。
Apollo の
clusterパラメーターは、Nacos のgroupパラメーターにマッピングされます。 Apollo の{appId}.{namespace}.{format}構成は、Nacos のdataIdパラメーターにマッピングされます。Apollo の
appIdパラメーターは、Nacos のappNameパラメーターにマッピングされます。
手順 1:Apollo 構成をエクスポートする
ツールを使用して Apollo 構成を .zip パッケージとしてエクスポートする
セルフマネージド Apollo コンソールにログインします。
この例では、リンクをクリックして、セルフマネージド Apollo コンソールにアクセスできます。
[マイ アプリケーション] ページで、目的のアプリケーションの名前をクリックします。
アプリケーション詳細ページの右上隅で、[管理ツール] > [構成のエクスポートとインポート] を選択します。 [構成のエクスポートとインポート] ページで、[エクスポート環境の選択] を選択し、[エクスポート] をクリックします。
異なる環境の構成は、異なる .zip ファイルとして個別にエクスポートする必要があります。
SQL ステートメントを実行して Apollo 構成をファイルとしてエクスポートする
以前のバージョンの Apollo では、ファイルエクスポート機能はサポートされていません。この場合は、データベースから直接構成をエクスポートできます。次の SQL ステートメントを実行して、構成を JSON または EXCEL ファイルとしてエクスポートできます。ファイル名の拡張子は .json または .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 ;
手順 2:ファイル形式を変換する
Apollo 構成をエクスポートすると、.zip、.json、または .xlsx ファイルが取得されます。ファイル形式を、MSE コンソールで Nacos に直接インポートできる形式に変換する必要があります。
次のコマンドを実行して、ファイル形式変換ツールをダウンロードします。 curl -O https://msesync.oss-cn-hangzhou.aliyuncs.com/ApolloConfigTransfer.jar。
次のコマンドを実行して、変換プログラムを実行します。 java -DsourceFilePath={エクスポートされた Apollo ファイルのフルパス} -jar ApolloConfigTransfer.jar。
プログラムが実行されると、nacos_config_import_{エクスポートされた Apollo ファイル名}_{タイムスタンプ}.zip という名前のファイルが現在のディレクトリで使用可能になります。
手順 3:Nacos にファイルをインポートする
手順 4:依存関係を変更する
アプリケーションプロジェクトで、Apollo の依存関係を Spring Cloud Alibaba の依存関係に変更します。
変更前:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>{apollo.version}</version>
</dependency>変更後:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.10</version>
</dependency>Spring Cloud Alibaba 2023.x を使用している場合は、バージョンを 2023.0.3.2 にアップグレードします。
Spring Cloud Alibaba 2022.x を使用している場合は、バージョンを 2022.0.0.2 にアップグレードします。
Spring Cloud Alibaba 2021.x を使用している場合は、バージョンを 2021.0.6.2 にアップグレードします。
Spring Cloud Alibaba 2.2.x を使用している場合は、バージョンを 2.2.11 にアップグレードします。
手順 5:コードを変更する
アプリケーションは、次の Apollo 動的構成方法をサポートしています。このセクションの説明に基づいて、関連コードを変更できます。
@Value アノテーション
@Value アノテーションは、Spring Bean のプロパティ値を参照するために使用されます。 Spring Cloud Alibaba フレームワークは、コードを変更せずにアノテーションをサポートしています。
@RestController
@RefreshScope
public class DemoController {
@Value("testKey")
String testKey = "value";
@RequestMapping("/valuekey")
public String getNacosTestKey() {
return testKey;
}
}@ApolloConfig アノテーション
@ApolloConfig アノテーションは、Spring Bean を登録し、アプリケーションのフィールドに関連するプロパティ値を Spring Bean に自動的に挿入するために使用されます。標準の 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;
}
}Apollo Config API
Apollo Config API は、特定の名前空間内の単一のプロパティ値を取得するために呼び出されます。
ConfigService.getAppConfig().getProperty("testkey", "defaulyv1");
ConfigService.getAppConfig("namespace").getProperty("testkey", "defaulyv1");Nacos で Apollo Config API を再カプセル化できます。サンプルコード:
@NacosConfig(dataId="appId1.application.properties",group="group")
Properties nacosConfigProperties;
private void method() {
String value=nacosConfigProperties.getProperty("key","defaultValue");
}ApolloConfigChangeListener コールバック
Apollo 内の特定のプレフィックスのキーが変更されると、ApolloConfigChangeListener メソッドがコールバックされます。
Apollo のサンプルコード:
/**
* リスナーに通知する
* @param configChangeEvent
*/
@ApolloConfigChangeListener(interestedKeyPrefixes = {"data."})
public void apolloNotify(ConfigChangeEvent configChangeEvent) {
System.out.println(configChangeEvent.changedKeys());
}
Nacos のサンプルコード:
@NacosConfigKeysListener(dataId="appId1.application.properties",group="group",interestedKeyPrefixes = {"data."})
public void apolloNotify(ConfigChangeEvent configChangeEvent) {
System.out.println(configChangeEvent.changedKeys());
}Spring Cloud Alibaba Nacos 構成センターでのアノテーションの使用法の詳細については、「Spring Cloud アプリケーション向けの Nacos 構成センターのアノテーション」をご参照ください。
手順 6:エンドポイントを変更する
Nacos 構成をプロジェクトコードに追加します。
## 元の Apollo 構成 # Environment-Dappllo.env={env} apollo.meta=http://127.0.0.1:8070 apollo.bootstrap.enabled=true # 構成を追加する名前空間を指定します。 apollo.bootstrap.namespaces=application,namespace1 # クラスターを指定します。 apollo.bootstrap.cluster=default # アプリケーションの ID を指定します。 app.id=app1エンドポイントを Nacos エンドポイントに変更します。
# 追加した構成の dataId とグループを指定します。 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 エンドポイントを指定します。 spring.cloud.nacos.config.server-addr=mse-xxx-p.nacos-ans.mse.aliyuncs.com # MSE Nacos 名前空間を指定します。 spring.cloud.nacos.config.namespace={MSE Nacos 構成センターの指定された環境に対応する名前空間 ID(例:5babe1ee-1352-xxxx-bd7b-7e7ce892e2ab)}サービスを再起動します。