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

Enterprise Distributed Application Service:サービスゲートウェイの構築

最終更新日:Jan 07, 2025

このトピックでは、Nacos を使用して、Spring Cloud Gateway または Spring Cloud Netflix Zuul に基づいてサービスゲートウェイを構築する方法について説明します。

準備

  • Maven をダウンロードし、環境変数を設定します。 Maven が既にインストールされている場合は、この手順をスキップします。

  • Nacos Server の最新バージョンをダウンロードします。 詳細については、Nacos Server リリースノートをご参照ください。Nacos Server が既にインストールされている場合は、この手順をスキップします。

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

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

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

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

  • デモアプリケーションをダウンロードします。

    このトピックでは、オンプレミス環境でアプリケーションを開発する方法に関する重要な情報を説明します。 完全な Spring Cloud アプリケーションを入手するには、spring-cloud-gateway-nacosspring-cloud-zuul-nacos、および nacos-service-provider をダウンロードします。

  • オプション:

Spring Cloud Gateway に基づいてサービスゲートウェイを構築する

このセクションでは、Nacos を使用して、Spring Cloud Gateway に基づいて、アプリケーションのサービスゲートウェイをゼロから構築する方法について説明します。

  1. サービスゲートウェイを作成します。

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

    2. Spring Boot と Spring Cloud の依存関係を 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>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-gateway</artifactId>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
               <version>2.1.1.RELEASE</version>
           </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. GatewayApplication という名前のサービスゲートウェイ起動クラスを開発します。

          @SpringBootApplication
          @EnableDiscoveryClient
          public class GatewayApplication {
              public static void main(String[] args) {
                  SpringApplication.run(GatewayApplication.class, args);
              }
          }                                
      // サービスゲートウェイの起動クラス
    4. レジストリアドレスを Nacos Server のアドレスに設定するには、application.yaml に次の設定を追加します。

      次の設定では、127.0.0.1:8848 は Nacos Server の IP アドレスを指定します。 Nacos Server が別のマシンにデプロイされている場合は、値を対応するアドレスに変更します。

      routes 設定は、ゲートウェイのルーティングと転送ルールを指定します。 この例では、/provider1/ で始まるすべてのリクエストは、service-provider バックエンドサービスにルーティングされます。

      server:
       port: 18012
      
      spring:
       application:
              name: spring-cloud-gateway-nacos
       cloud:
              gateway: # ゲートウェイのルートを設定します
                routes:
                - id: service-provider          # /provider1/ で始まるリクエストを provider1 に転送します。
                  uri: lb://service-provider
                  predicates:
                  - Path=/provider1/**
                  filters:
                  - StripPrefix=1               # プレフィックス /provider1 を切り捨てる必要があることを示します。
              nacos:
                discovery:
                  server-addr: 127.0.0.1:8848                               
    5. GatewayApplication 起動クラスの main 関数を実行して、ゲートウェイを起動します。

    6. http://127.0.0.1:8848/nacos で、オンプレミスの Nacos Server コンソールにログインします。 デフォルトのユーザー名とパスワードは nacos です。 左側のナビゲーションペインで、[サービス管理] > [サービス] を選択します。 spring-cloud-gateway-nacos がサービスリストに表示されていることがわかります。 また、[詳細] でサービスの詳細情報を照会することもできます。 これは、ゲートウェイが起動され、登録されたことを示します。 次に、ダウンストリームサービスを作成して、ゲートウェイのリクエスト転送機能を確認します。

  2. サービスプロバイダーを作成します。

    サービスプロバイダーアプリケーションの作成方法の詳細については、サービスの登録と検出の実装をご参照ください。

    次のコードは、サービスプロバイダーを作成する方法の例を示しています。

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
    
        public static void main(String[] args) {
    
            SpringApplication.run(ProviderApplication, args);
        }
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }
    }                 // サービスプロバイダーの例       
  3. 結果を確認します。

    • オンプレミス環境で結果を確認する

      作成したサービスゲートウェイとサービスプロバイダーをオンプレミス環境で起動し、Spring Cloud Gateway に接続してリクエストをバックエンドサービスに転送します。 返された結果は、呼び出しが成功したことを示します。

    • エンタープライズ分散型アプリケーションサービス (EDAS) で結果を確認する

      アプリケーションを EDAS にデプロイして、結果を確認できます。 詳細については、サービスの登録と検出の実装をご参照ください。

      EDAS レジストリは、商用バージョンの Nacos を提供します。 アプリケーションを EDAS にデプロイすると、EDAS は、オンプレミスの Nacos Server に関する次の情報を更新します。IP アドレスとサービスポート、名前空間、AccessKey ID、AccessKey シークレット、およびコンテキストパス。 追加の設定を行う必要はありません。 元の設定は保持または削除できます。

Spring Cloud Netflix Zuul に基づいてサービスゲートウェイを構築する

このセクションでは、Nacos をレジストリとして使用して、Spring Cloud Netflix Zuul に基づいて、アプリケーションのサービスゲートウェイをゼロから構築する方法について説明します。

  1. サービスゲートウェイを作成します。

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

    2. Spring Boot、Spring Cloud、および Spring Cloud Alibaba の依存関係を pom.xml ファイルに追加します。

      Spring Boot 2.1.4.RELEASE、Spring Cloud Greenwich.SR1、および Spring Cloud Alibaba 0.9.0 の依存関係を追加します。

       <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.1.4.RELEASE</version>
           <relativePath/>
       </parent>
      
       <dependencies>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-webflux</artifactId>
           </dependency>
      
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
               <version>2.1.1.RELEASE</version>
           </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. ZuulApplication という名前のサービスゲートウェイ起動クラスを開発します。

          @SpringBootApplication
          @EnableZuulProxy
          @EnableDiscoveryClient
          public class ZuulApplication {
              public static void main(String[] args) {
                  SpringApplication.run(ZuulApplication.class, args);
              }
          }             // サービスゲートウェイ起動クラス                   
    4. レジストリアドレスを Nacos Server のアドレスに設定するには、application.properties に次の設定を追加します。

      次の設定では、127.0.0.1:8848 は Nacos Server の IP アドレスを指定します。 Nacos Server が別のマシンにデプロイされている場合は、値を対応するアドレスに変更します。

      routes 設定は、Zuul のルーティングと転送ルールを指定します。 この例では、/provider1/ で始まるすべてのリクエストは、service-provider バックエンドサービスにルーティングされます。

       spring.application.name=spring-cloud-zuul-nacos
       server.port=18022
      
       spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
      
       zuul.routes.opensource-provider1.path=/provider1/**
       zuul.routes.opensource-provider1.serviceId=service-provider                                
    5. spring-cloud-zuul-nacos の ZuulApplication の main 関数を実行して、サービスを起動します。

    6. http://127.0.0.1:8848/nacos で、オンプレミスの Nacos Server コンソールにログインします。 デフォルトのユーザー名とパスワードは nacos です。 左側のナビゲーションペインで、[サービス管理] > [サービス] を選択します。 spring-cloud-zuul-nacos がサービスリストに表示されていることがわかります。 また、[詳細] でサービスの詳細情報を照会することもできます。 これは、ゲートウェイが起動され、登録されたことを示します。 次に、ダウンストリームサービスを作成して、ゲートウェイのリクエスト転送機能を確認します。

  2. サービスプロバイダーを作成します。

    サービスプロバイダーの作成方法の詳細については、サービスの登録と検出の実装をご参照ください。

    次のコードは、サービスプロバイダーの起動クラスを作成する方法の例を示しています。

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
    
        public static void main(String[] args) {
    
            SpringApplication.run(ProviderApplication, args);
        }
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }
    }                 // サービスプロバイダー起動クラスの例       
  3. 結果を確認します。

    • オンプレミス環境で結果を確認する

      作成した Zuul サービスゲートウェイとサービスプロバイダーをオンプレミス環境で起動し、Spring Cloud Netflix Zuul に接続してリクエストをバックエンドサービスに転送します。 返された結果は、呼び出しが成功したことを示します。

      EDAS Spring Cloud application development: build a Zuul gateway

    • EDAS で結果を確認する

      アプリケーションを EDAS にデプロイして、結果を確認します。 詳細については、サービスの登録と検出の実装をご参照ください。

      EDAS レジストリは、商用バージョンの Nacos を提供します。 アプリケーションを EDAS にデプロイすると、EDAS は、オンプレミスの Nacos Server に関する次の情報を更新します。IP アドレスとサービスポート、名前空間、AccessKey ID、AccessKey シークレット、およびコンテキストパス。 追加の設定を行う必要はありません。 元の設定は保持または削除できます。

バージョン

  • この例では、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 はサポート終了となっています。 したがって、このバージョンを使用してアプリケーションを開発することはお勧めしません。