このトピックでは、Nacos を使用して、Spring Cloud Gateway または Spring Cloud Netflix Zuul に基づいてサービスゲートウェイを構築する方法について説明します。
準備
Maven をダウンロードし、環境変数を設定します。 Maven が既にインストールされている場合は、この手順をスキップします。
Nacos Server の最新バージョンをダウンロードします。 詳細については、Nacos Server リリースノートをご参照ください。Nacos Server が既にインストールされている場合は、この手順をスキップします。
ダウンロードした Nacos Server パッケージを解凍します。
nacos/binディレクトリに移動して、Nacos Server を起動します。Linux、UNIX、または macOS では、
sh startup.sh -m standaloneコマンドを実行します。Windows では、
startup.cmdファイルをダブルクリックして実行します。
デモアプリケーションをダウンロードします。
このトピックでは、オンプレミス環境でアプリケーションを開発する方法に関する重要な情報を説明します。 完全な Spring Cloud アプリケーションを入手するには、spring-cloud-gateway-nacos、spring-cloud-zuul-nacos、および nacos-service-provider をダウンロードします。
オプション:
Spring Cloud Gateway に基づいてサービスゲートウェイを構築する
このセクションでは、Nacos を使用して、Spring Cloud Gateway に基づいて、アプリケーションのサービスゲートウェイをゼロから構築する方法について説明します。
サービスゲートウェイを作成します。
spring-cloud-gateway-nacosという名前の Maven プロジェクトを作成します。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>GatewayApplicationという名前のサービスゲートウェイ起動クラスを開発します。
// サービスゲートウェイの起動クラス@SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }レジストリアドレスを 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:8848GatewayApplication起動クラスの main 関数を実行して、ゲートウェイを起動します。http://127.0.0.1:8848/nacos で、オンプレミスの Nacos Server コンソールにログインします。 デフォルトのユーザー名とパスワードは nacos です。 左側のナビゲーションペインで、 を選択します。 spring-cloud-gateway-nacos がサービスリストに表示されていることがわかります。 また、[詳細] でサービスの詳細情報を照会することもできます。 これは、ゲートウェイが起動され、登録されたことを示します。 次に、ダウンストリームサービスを作成して、ゲートウェイのリクエスト転送機能を確認します。
サービスプロバイダーを作成します。
サービスプロバイダーアプリケーションの作成方法の詳細については、サービスの登録と検出の実装をご参照ください。
次のコードは、サービスプロバイダーを作成する方法の例を示しています。
@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; } } } // サービスプロバイダーの例結果を確認します。
オンプレミス環境で結果を確認する
作成したサービスゲートウェイとサービスプロバイダーをオンプレミス環境で起動し、Spring Cloud Gateway に接続してリクエストをバックエンドサービスに転送します。 返された結果は、呼び出しが成功したことを示します。
エンタープライズ分散型アプリケーションサービス (EDAS) で結果を確認する
アプリケーションを EDAS にデプロイして、結果を確認できます。 詳細については、サービスの登録と検出の実装をご参照ください。
EDAS レジストリは、商用バージョンの Nacos を提供します。 アプリケーションを EDAS にデプロイすると、EDAS は、オンプレミスの Nacos Server に関する次の情報を更新します。IP アドレスとサービスポート、名前空間、AccessKey ID、AccessKey シークレット、およびコンテキストパス。 追加の設定を行う必要はありません。 元の設定は保持または削除できます。
Spring Cloud Netflix Zuul に基づいてサービスゲートウェイを構築する
このセクションでは、Nacos をレジストリとして使用して、Spring Cloud Netflix Zuul に基づいて、アプリケーションのサービスゲートウェイをゼロから構築する方法について説明します。
サービスゲートウェイを作成します。
spring-cloud-zuul-nacosという名前の Maven プロジェクトを作成します。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>ZuulApplicationという名前のサービスゲートウェイ起動クラスを開発します。@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } } // サービスゲートウェイ起動クラスレジストリアドレスを 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-providerspring-cloud-zuul-nacos の
ZuulApplicationの main 関数を実行して、サービスを起動します。http://127.0.0.1:8848/nacos で、オンプレミスの Nacos Server コンソールにログインします。 デフォルトのユーザー名とパスワードは nacos です。 左側のナビゲーションペインで、[サービス管理] > [サービス] を選択します。 spring-cloud-zuul-nacos がサービスリストに表示されていることがわかります。 また、[詳細] でサービスの詳細情報を照会することもできます。 これは、ゲートウェイが起動され、登録されたことを示します。 次に、ダウンストリームサービスを作成して、ゲートウェイのリクエスト転送機能を確認します。
サービスプロバイダーを作成します。
サービスプロバイダーの作成方法の詳細については、サービスの登録と検出の実装をご参照ください。
次のコードは、サービスプロバイダーの起動クラスを作成する方法の例を示しています。
@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; } } } // サービスプロバイダー起動クラスの例結果を確認します。
オンプレミス環境で結果を確認する
作成した Zuul サービスゲートウェイとサービスプロバイダーをオンプレミス環境で起動し、Spring Cloud Netflix Zuul に接続してリクエストをバックエンドサービスに転送します。 返された結果は、呼び出しが成功したことを示します。

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