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) 機能を使用できます。
このトピックの指示に基づいて、アプリケーションのサービス登録とサービス検出を実装できます。また、アプリケーションのデモをダウンロードすることもできます:service-provider および service-consumer。
準備
アプリケーションを開発する前に、次の操作が完了していることを確認してください。
Maven をダウンロードし、環境変数を設定します。
Nacos Server の最新バージョンをダウンロードします。
次の手順を実行して、Nacos Server を起動します。
ダウンロードした Nacos Server パッケージを解凍します。
nacos/binディレクトリに移動して、Nacos Server を起動します。Linux、UNIX、または macOS では、
sudo sh startup.sh -m standaloneコマンドを実行します。Windows では、
startup.cmdファイルをダブルクリックして、ファイルを実行します。
サービス プロバイダーの作成
オンプレミス環境でプロバイダー アプリケーション プロジェクトを作成し、依存関係を追加し、サービス登録とサービス検出機能を有効にして、Nacos Server をレジストリとして指定します。
nacos-service-providerという名前の Maven プロジェクトを作成します。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 リリースはサービス提供期間の終了に達しています。したがって、このリリースを使用してアプリケーションを開発することはお勧めしません。
src\main\javaに、com.aliware.edasという名前のパッケージを作成します。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); } }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; } }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ファイルに構成項目を追加します。詳細については、参照用の構成項目 をご参照ください。結果を確認します。
mainProviderApplicationnacos-service-providerの の 関数を使用して、アプリケーションを起動します。http://127.0.0.1:8848/nacosで、オンプレミス Nacos Server コンソールにログインします。オンプレミス Nacos Server コンソールのデフォルトのユーザー名とパスワードはどちらも nacos です。
左側のナビゲーション ペインで、[サービス管理] > [サービス] を選択します。
service-providerがサービス リストに表示されていることを確認できます。 [詳細] でサービスに関する詳細情報を照会することもできます。
サービス コンシューマーの作成
このセクションでは、サービス登録機能について説明し、Nacos Server が RestTemplate および FeignClient とどのように連携するかを説明します。
nacos-service-consumerという名前の Maven プロジェクトを作成します。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>src\main\javaに、com.aliware.edasという名前のパッケージを作成します。com.aliware.edasパッケージで、RestTemplate と FeignClient を構成します。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); }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); } }
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); } }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ファイルに構成項目を追加します。詳細については、参照用の構成項目 をご参照ください。結果を確認します。
mainConsumerApplicationnacos-service-consumerの の 関数を実行して、アプリケーションを起動します。http://127.0.0.1:8848/nacosで、オンプレミス Nacos Server コンソールにログインします。オンプレミス Nacos Server コンソールのデフォルトのユーザー名とパスワードはどちらも nacos です。
左側のナビゲーション ペインで、[サービス管理] > [サービス] を選択します。
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-restWindows では、ブラウザーに http://127.0.0.1:18082/echo-rest/rest-rest と http://127.0.0.1:18082/echo-feign/feign-rest を入力します。
次のステップ
参照用の構成項目
構成項目 | キー | デフォルト値 | 説明 |
サーバー アドレス | 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 をご参照ください。