Spring Cloud アプリケーションのサービス登録とサービス検出は、Eureka、Consul、ZooKeeper などのコンポーネントを使用して実装されていました。このトピックでは、Nacos を使用してサービス登録とサービス検出を実装する方法、Nacos を Serverless App Engine (SAE) にホストする方法について説明します。
メリット
Spring Cloud アプリケーションのサービス登録とサービス検出は、Eureka、Consul、ZooKeeper、Redis などのコンポーネントを使用して実装されます。Spring Cloud アプリケーションを SAE にホストする場合、ビジネスコードを変更することなくサービス登録とサービス検出を実行するには、元のサービスレジストリと構成センターを Alibaba Nacos Discovery に置き換えるだけで済みます。
SAE サービスレジストリは、Spring Cloud Alibaba Nacos Discovery のすべての機能を提供し、Eureka、Consul、ZooKeeper、Redis などの複数のコンポーネントへの依存関係から解放されます。
Spring Cloud アプリケーションを SAE にホストした後、レジストリと構成センターの構築とメンテナンスを気にすることなく、Spring Cloud アプリケーションのロジックの構築に集中できます。自動スケーリング、アプリケーションの一括迅速起動と停止、アプリケーション監視など、SAE が提供する機能は、開発コストと O&M コストの大幅な削減に役立ちます。
複数のマイクロサービス アプリケーションを管理するには、推奨順に次のいずれかのサービスレジストリを使用することを検討してください。
手順 1: デモを入手する
eureka-service-provider と eureka-service-consumer は、SAE マイクロサービス デモアプリケーションのパッケージです。Eureka はコンシューマとプロバイダに統合されています。コンシューマはプロバイダが提供するサービスを消費します。
プロバイダ: eureka-service-provider.zip
コンシューマ: eureka-service-consumer.zip
手順 2: プロバイダのサービスレジストリ構成を変更する
クラウドネイティブ プロバイダを SAE にホストするには、プロバイダの POM 依存関係を変更し、Nacos サーバーの IP アドレスを指定する必要があります。
次のシナリオでは、Nacos サーバーの IP アドレスを指定する必要があります。
ローカルテストに合格した後、アプリケーションを SAE にホストする場合。
SAE サービスレジストリがセルフマネージド Nacos レジストリである場合。
pom.xml ファイルに次の依存関係を追加します。
プロバイダの pom.xml ファイルを開きます。
spring-cloud-starter-netflix-eureka-clientをspring-cloud-starter-alibaba-nacos-discoveryに置き換え、Nacos サーバーのバージョンを構成します。置き換え前:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>置き換え後:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency>説明この例では Spring Cloud Greenwich を使用しています。
spring-cloud-starter-alibaba-nacos-discoveryのバージョンは2.1.1.RELEASEです。Spring Cloud Finchley を使用する場合は、
spring-cloud-starter-alibaba-nacos-discoveryのバージョンは2.0.1.RELEASEです。Spring Cloud Edgware を使用する場合は、
spring-cloud-starter-alibaba-nacos-discoveryのバージョンは1.5.1.RELEASEです。このバージョンのサービスは終了しています。このバージョンはお勧めしません。詳細については、「Spring Cloud Edgware リリースノート」をご参照ください。
Nacos サーバーの IP アドレスを指定します。
src\main\resources 内の application.properties ファイルを開き、Nacos サーバーの IP アドレスを指定します。
変更前:
spring.application.name=service-provider server.port=18081 eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/変更後:
spring.application.name=service-provider server.port=18081 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848127.0.0.1は Nacos サーバーの IP アドレスです。Nacos サーバーが別の物理サーバーにデプロイされている場合は、それに応じて IP アドレスを変更します。その他の要件がある場合は、構成項目 を参照して、application.propertiesファイルに必要な構成を追加します。構成項目アプリケーションサービスをクエリします。
mainProviderApplicationnacos-service-providerプロジェクトの の 関数を実行して、プロバイダを起動します。127.0.0.1:8848/nacosにアクセスして、コンピュータにインストールされている Nacos サーバーコンソールにログオンします。左側のナビゲーションウィンドウで、 を選択します。説明Nacos サーバーコンソールにログオンするためのデフォルトのユーザー名とパスワードは nacos です。
[service-provider] が [サービスリスト] に表示され、service-provider の詳細をクエリできる場合、service-provider は正常に登録されています。
手順 3: コンシューマのサービスレジストリ構成を変更する
クラウドネイティブ コンシューマを SAE にホストするには、コンシューマの POM 依存関係を変更し、Nacos サーバーの IP アドレスを指定する必要があります。
次のシナリオでは、Nacos サーバーの IP アドレスを指定する必要があります。
ローカルテストに合格した後、アプリケーションを SAE にホストする場合。
SAE サービスレジストリがセルフマネージド Nacos レジストリである場合。
pom.xml ファイルに次の依存関係を追加します。
プロバイダの pom.xml ファイルを開きます。
spring-cloud-starter-netflix-eureka-clientをspring-cloud-starter-alibaba-nacos-discoveryに置き換え、Nacos サーバーのバージョンを構成します。置き換え前:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>置き換え後:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency>説明この例では Spring Cloud Greenwich を使用しています。
spring-cloud-starter-alibaba-nacos-discoveryのバージョンは2.1.1.RELEASEです。Spring Cloud Finchley を使用する場合は、
spring-cloud-starter-alibaba-nacos-discoveryのバージョンは2.0.1.RELEASEです。Spring Cloud Edgware を使用する場合は、
spring-cloud-starter-alibaba-nacos-discoveryのバージョンは1.5.1.RELEASEです。このバージョンのサービスは終了しています。このバージョンはお勧めしません。詳細については、「Spring Cloud Edgware リリースノート」をご参照ください。
Nacos サーバーの IP アドレスを指定します。
src\main\resources 内の application.properties ファイルを開き、Nacos サーバーの IP アドレスを指定します。
変更前:
spring.application.name=service-consumer server.port=18082 eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/変更後:
spring.application.name=service-consumer server.port=18082 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848127.0.0.1は Nacos サーバーの IP アドレスです。Nacos サーバーが別の物理サーバーにデプロイされている場合は、それに応じて IP アドレスを変更します。その他の要件がある場合は、構成項目 を参照して、application.propertiesファイルに必要な構成を追加します。構成項目アプリケーションサービスをクエリします。
mainConsumerApplicationnacos-service-consumerプロジェクトの の 関数を実行して、コンシューマを起動します。127.0.0.1:8848/nacosにアクセスして、コンピュータにインストールされている Nacos サーバーコンソールにログオンします。左側のナビゲーションウィンドウで、 を選択します。説明Nacos サーバーコンソールにログオンするためのデフォルトのユーザー名とパスワードは nacos です。
[service-consumer] が [サービスリスト] に表示され、service-consumer の詳細をクエリできる場合、service-consumer は正常に登録されています。
手順 4: コンシューマがプロバイダのサービスを消費した結果を表示する
コンピュータで、コンシューマがプロバイダによって提供されるサービスを消費した結果を表示します。サービスを起動し、IP+ポート/echo-rest/<カスタム変数> または IP+ポート/echo-feign/<カスタム変数> を実行して結果を表示します。
Linux、UNIX、または macOS の場合、
curl http://127.0.0.1:18082/echo-rest/<カスタム変数>またはcurl http://127.0.0.1:18082/echo-feign/<カスタム変数>を実行します。Windows の場合、ブラウザに
http://127.0.0.1:18082/echo-rest/<カスタム変数>またはhttp://127.0.0.1:0.1:18082/echo-feign/<カスタム変数>を入力します。
Windows オペレーティングシステムでのサービスの使用例を次に示します。

ステップ 5: SAE にアプリケーションをデプロイする
このセクションでは、ローカルプログラムを実行可能な JAR パッケージにコンパイルする方法の例を提供します。また、デプロイメント前にアプリケーションのイメージを作成することもできます。
アプリケーションの pom.xml ファイルに次の構成を追加し、mvn clean package コマンドを実行して、ローカルプログラムを実行可能な JAR パッケージにコンパイルします。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>コンパイルされたプロバイダーとコンシューマーのアプリケーションパッケージを SAE にデプロイします。詳細については、「JAR パッケージを使用して Java アプリケーションをデプロイする」をご参照ください。
重要SAE では、空のアプリケーションを作成することはできません。コンソールでアプリケーションを作成してから、アプリケーションにデータをプッシュする必要があります。
JAR パッケージを使用してアプリケーションをデプロイする場合は、[アプリケーションランタイム環境] を [標準 Java アプリケーションランタイム環境] に設定します。
WAR パッケージを使用してアプリケーションをデプロイする場合は、[アプリケーションランタイム環境] を [apache-tomcat-XXX] に設定します。
SAE にアプリケーションをデプロイすると、SAE のサービスレジストリによって、Nacos サーバーの IP アドレス、サービスポート、名前空間、アクセスキー ID、およびアクセスキーシークレットが優先的に自動設定されます。必要に応じて、デフォルトの構成を保持または削除できます。
手順 6: 結果を確認する
インターネットに接続された CLB インスタンスをコンシューマーにバインドし、ブラウザで CLB インスタンスに指定したパブリックエンドポイントを入力して、コンシューマーのホームページにアクセスします。詳細については、「CLB インスタンスをアプリケーションにバインドし、アプリケーションのパブリック IP アドレスまたはプライベート IP アドレスを生成する」をご参照ください。
コンシューマーのホームページで、プロバイダーからサービスを呼び出すリクエストを作成します。SAEコンソール にログインします。左側のナビゲーションウィンドウで、[アプリケーション] > [アプリケーション] を選択します。上部のナビゲーションバーで、リージョンを選択します。
[アプリケーション] ページで、コンシューマーを選択し、[基本情報] ページに移動します。
左側のナビゲーションウィンドウで、 を選択して、サービス呼び出し全体のデータを表示します。
プロバイダーからサービスを呼び出すリクエストに関するデータが [概要] ページに表示されている場合は、サービスが正常に呼び出されています。
構成項目
構成項目 | キー | デフォルト値 | 説明 |
サーバー IP アドレス | spring.cloud.nacos.discovery.server-addr | なし | Nacos Server がリッスンする IP アドレスとポート。 |
サービス名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | サービスの名前。 |
ネットワーク インターフェイス コントローラー (NIC) 名 | spring.cloud.nacos.discovery.network-interface | なし | IP アドレスが指定されていない場合、NIC の IP アドレスが登録されます。この項目が構成されていない場合は、デフォルトで最初の NIC の IP アドレスが使用されます。 |
登録済み IP アドレス | spring.cloud.nacos.discovery.ip | なし | 構成時に、登録済み IP アドレスは ENI 名よりも優先されます。 |
登録ポート | spring.cloud.nacos.discovery.port | -1 | 登録ポートを構成する必要はありません。システムはポートを自動的に検出します。 |
名前空間 | spring.cloud.nacos.discovery.namespace | なし | 異なる環境での登録の隔離。たとえば、開発、テスト、本番環境における構成やサービスなどのリソースの隔離。 |
メタデータ | spring.cloud.nacos.discovery.metadata | なし | このメタデータは JSON Map 形式で構成する必要があります。ビジネス要件に基づいてサービス関連のメタデータを指定できます。 |
クラスター | spring.cloud.nacos.discovery.cluster-name | DEFAULT | Nacos クラスターの名前。 |
エンドポイント | spring.cloud.nacos.discovery.endpoint | なし | リージョン内のサービスのドメイン名。このドメイン名に基づいて、サーバーの IP アドレスを動的に取得できます。 SAE にアプリケーションをデプロイする場合は、この項目を指定する必要はありません。 |
Ribbon 統合を有効にするかどうか | ribbon.nacos.enabled | true | 必要な場合にのみ Ribbon 統合を無効にします。 |
Spring Cloud Alibaba Nacos Discovery の詳細については、「Spring Cloud Alibaba Nacos Discovery」をご参照ください。
次の手順
作成したアプリケーションで次の操作を実行できます。
アプリケーションはインターネットにアクセスしたり、インターネット経由でアクセスされたりすることはできません。 アプリケーションのネットワークを構成する場合は、「アプリケーションアクセス」をご参照ください。
詳細については、「O&M 管理」をご参照ください。



