すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:サービス登録とサービス検出の実装

最終更新日:Apr 03, 2025

Enterprise Distributed Application Service (EDAS) は、Nacos レジストリの一般提供 (GA) バージョンを提供します。Nacos で開発されたアプリケーションは、コードを変更することなく、この EDAS の共有レジストリを使用できます。アプリケーションを EDAS にデプロイするだけで済みます。このトピックでは、Nacos に基づいてオンプレミス環境で Spring Cloud サンプル マイクロサービス アプリケーションのペアを開発する方法について説明します。ペアには、サービス プロバイダーとサービス コンシューマーが含まれます。

背景情報

マイクロサービス アプリケーションは、レジストリを使用してサービス登録とサービス検出を実装します。アプリケーションを開発する際には、実際のニーズに基づいてレジストリを選択できます。

このトピックで説明されている Nacos をレジストリとして使用して、アプリケーションのサービス登録とサービス検出を実装できます。また、Eureka、ZooKeeper、Consul など、ユーザーが作成したレジストリや Microservice Engine (MSE) で管理されているレジストリを使用することもできます。アプリケーションを EDAS にデプロイした後、レジストリの種類に関係なく、EDAS のアプリケーション管理、マイクロサービス ガバナンス、クラウドネイティブ Platform as a Service (PaaS) 機能を使用できます。

  • アプリケーションを EDAS にデプロイする方法の詳細については、概要 および 概要 をご参照ください。

このトピックの指示に基づいて、アプリケーションのサービス登録とサービス検出を実装できます。また、アプリケーションのデモをダウンロードすることもできます:service-provider および service-consumer

準備

アプリケーションを開発する前に、次の操作が完了していることを確認してください。

  • Maven をダウンロードし、環境変数を設定します。

  • Nacos Server の最新バージョンをダウンロードします。

  • 次の手順を実行して、Nacos Server を起動します。

    1. ダウンロードした Nacos Server パッケージを解凍します。

    2. nacos/bin ディレクトリに移動して、Nacos Server を起動します。

      • Linux、UNIX、または macOS では、sudo sh startup.sh -m standalone コマンドを実行します。

      • Windows では、startup.cmd ファイルをダブルクリックして、ファイルを実行します。

サービス プロバイダーの作成

オンプレミス環境でプロバイダー アプリケーション プロジェクトを作成し、依存関係を追加し、サービス登録とサービス検出機能を有効にして、Nacos Server をレジストリとして指定します。

  1. nacos-service-provider という名前の Maven プロジェクトを作成します。

  2. pom.xml ファイルに依存関係を追加します。

    次のコードは、依存関係を追加する方法の例を示しています。この例では、Spring Boot 2.1.4.RELEASE と Spring Cloud Greenwich.SR1 が使用されています。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>                  

    この例では Spring Cloud Greenwich が使用されており、Spring Cloud Alibaba のバージョンは 2.1.1.RELEASE です。

    • Spring Cloud Finchley を使用する場合は、Spring Cloud Alibaba のバージョンは 2.0.1.RELEASE です。

    • Spring Cloud Edgware を使用する場合は、Spring Cloud Alibaba のバージョンは 1.5.1.RELEASE です。

      説明

      Spring Cloud Edgware リリースはサービス提供期間の終了に達しています。したがって、このリリースを使用してアプリケーションを開発することはお勧めしません。

  3. src\main\java に、com.aliware.edas という名前のパッケージを作成します。

  4. com.aliware.edas パッケージに、サービス プロバイダーの ProviderApplication という名前のスタートアップ クラスを作成し、次のコードを追加します。

    @EnableDiscoveryClient アノテーションは、アプリケーションでサービス登録とサービス検出機能を有効にする必要があることを示します。

        package com.aliware.edas;
    
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
        @SpringBootApplication
        @EnableDiscoveryClient
        public class ProviderApplication {
    
            public static void main(String[] args) {
                SpringApplication.run(ProviderApplication.class, args);
            }
        }             
  5. com.aliware.edas パッケージに、EchoController を作成します。

    EchoController で、/echo/{string} を URL マッピングとして、GET を HTTP メソッドとして指定します。メソッド パラメーターを URL パスから取得し、受信したパラメーターをエコーします。

        package com.aliware.edas;
    
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }              
  6. src\main\resources に、application.properties という名前のファイルを作成し、application.properties に次の設定を追加して、Nacos Server の IP アドレスを指定します。

        spring.application.name=service-provider
        server.port=18081
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848               

    上記の構成では、127.0.0.1 は Nacos Server の IP アドレスです。Nacos Server が別のマシンにデプロイされている場合は、値をそのマシンの IP アドレスに変更する必要があります。その他の要件がある場合は、application.properties ファイルに構成項目を追加します。詳細については、参照用の構成項目 をご参照ください。

  7. 結果を確認します。

    1. mainProviderApplicationnacos-service-provider の の 関数を使用して、アプリケーションを起動します。

    2. http://127.0.0.1:8848/nacos で、オンプレミス Nacos Server コンソールにログインします。

      オンプレミス Nacos Server コンソールのデフォルトのユーザー名とパスワードはどちらも nacos です。

    3. 左側のナビゲーション ペインで、[サービス管理] > [サービス] を選択します。

      service-provider がサービス リストに表示されていることを確認できます。 [詳細] でサービスに関する詳細情報を照会することもできます。

サービス コンシューマーの作成

このセクションでは、サービス登録機能について説明し、Nacos Server が RestTemplate および FeignClient とどのように連携するかを説明します。

  1. nacos-service-consumer という名前の Maven プロジェクトを作成します。

  2. pom.xml ファイルに依存関係を追加します。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>        
  3. src\main\java に、com.aliware.edas という名前のパッケージを作成します。

  4. com.aliware.edas パッケージで、RestTemplate と FeignClient を構成します。

    1. com.aliware.edas パッケージに、EchoService という名前のインターフェース クラスを作成し、@FeignClient アノテーションを追加して、HTTP URL と HTTP メソッドを構成します。

      package com.aliware.edas;
      
      import org.springframework.cloud.openfeign.FeignClient;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      
      @FeignClient(name = "service-provider")
      public interface EchoService {
          @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
          String echo(@PathVariable("str") String str);
      }                   
    2. com.aliware.edas パッケージに、ConsumerApplication という名前のスタートアップ クラスを作成し、関連する設定を追加します。

      • @EnableDiscoveryClient アノテーションを使用して、サービス登録とサービス検出を有効にします。

      • @EnableFeignClients アノテーションを使用して、FeignClient をアクティブにします。

      • @LoadBalanced アノテーションを追加して、RestTemplate をサービス検出と統合します。

      package com.aliware.edas;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.client.loadbalancer.LoadBalanced;
      import org.springframework.cloud.openfeign.EnableFeignClients;
      import org.springframework.context.annotation.Bean;
      import org.springframework.web.client.RestTemplate;
      
      @SpringBootApplication
      @EnableDiscoveryClient
      @EnableFeignClients
      public class ConsumerApplication {
      
          @LoadBalanced
          @Bean
          public RestTemplate restTemplate() {
              return new RestTemplate();
          }
      
          public static void main(String[] args) {
              SpringApplication.run(ConsumerApplication.class, args);
          }
      }
  5. com.aliware.edas パッケージに、TestController という名前のクラスを作成して、サービス検出機能をデモし、検証します。

        package com.aliware.edas;
    
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
        import org.springframework.web.client.RestTemplate;
    
        @RestController
        public class TestController {
    
            @Autowired
            private RestTemplate restTemplate;
            @Autowired
            private EchoService echoService;
    
            @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
            public String rest(@PathVariable String str) {
                return restTemplate.getForObject("http://service-provider/echo/" + str,
                        String.class);
            }
    
            @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
            public String feign(@PathVariable String str) {
                return echoService.echo(str);
            }
    
        }           
  6. src\main\resources に、application.properties という名前のファイルを作成し、application.properties に次の設定を追加して、Nacos Server の IP アドレスを指定します。

        spring.application.name=service-consumer
        server.port=18082
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    上記の構成では、127.0.0.1 は Nacos Server の IP アドレスです。Nacos Server が別のマシンにデプロイされている場合は、値をそのマシンの IP アドレスに変更する必要があります。その他の要件がある場合は、application.properties ファイルに構成項目を追加します。詳細については、参照用の構成項目 をご参照ください。

  7. 結果を確認します。

    1. mainConsumerApplicationnacos-service-consumer の の 関数を実行して、アプリケーションを起動します。

    2. http://127.0.0.1:8848/nacos で、オンプレミス Nacos Server コンソールにログインします。

      オンプレミス Nacos Server コンソールのデフォルトのユーザー名とパスワードはどちらも nacos です。

    3. 左側のナビゲーション ペインで、[サービス管理] > [サービス] を選択します。service-consumer がサービス リストに表示されていることを確認できます。 [詳細] でサービスの詳細情報を照会することもできます。

オンプレミス環境での結果のテスト

オンプレミス環境でコンシューマーからプロバイダーへの呼び出しを開始し、結果をテストします。

  • Linux、UNIX、または macOS では、次のコマンドを実行します。

    curl http://127.0.0.1:18082/echo-rest/rest-rest
    curl http://127.0.0.1:18082/echo-feign/feign-rest
  • Windows では、ブラウザーに http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest を入力します。

次のステップ

アプリケーションが開発された後、EDAS にデプロイできます。詳細については、概要 および 概要 をご参照ください。

参照用の構成項目

構成項目

キー

デフォルト値

説明

サーバー アドレス

spring.cloud.nacos.discovery.server-addr

なし

Nacos Server が listen する IP アドレスとポート。

サービス名

spring.cloud.nacos.discovery.service

${spring.application.name}

現在のサービスの名前。

ネットワーク インターフェース コントローラー (NIC) 名

spring.cloud.nacos.discovery.network-interface

なし

IP アドレスが指定されていない場合、登録される IP アドレスは NIC の IP アドレスです。この構成項目が指定されていない場合は、デフォルトで最初の NIC の IP アドレスが使用されます。

登録済み IP アドレス

spring.cloud.nacos.discovery.ip

なし

この構成項目は最優先されます。

登録済みポート

spring.cloud.nacos.discovery.port

-1

デフォルトでは設定は不要です。システムはポートを自動的に検出します。

名前空間

spring.cloud.nacos.discovery.namespace

なし

名前空間は、異なる環境のリソースを分離するために広く使用されています。たとえば、名前空間を使用して、開発環境、テスト環境、本番環境のリソース (構成やサービスなど) を分離できます。

メタデータ

spring.cloud.nacos.discovery.metadata

なし

この項目は Map 形式で構成する必要があります。必要に応じて、サービスに関連するメタデータ情報を指定できます。

クラスター

spring.cloud.nacos.discovery.cluster-name

DEFAULT

Nacos クラスターの名前。

エンドポイント

spring.cloud.nacos.discovery.endpoint

UTF-8

リージョン内のサービスのドメイン名。このドメイン名を使用して、サーバー アドレスを動的に取得できます。サービスを EDAS にデプロイする場合は、この構成項目を指定する必要はありません。

Ribbon 統合の有効化

ribbon.nacos.enabled

true

必要な場合にのみ値を変更します。

Spring Cloud Alibaba Nacos Discovery の詳細については、オープンソース バージョンの Nacos Discovery をご参照ください。