従来の XML 設定方法に加えて、Spring Boot を使用して Dubbo アプリケーションを開発できます。この方法は、Java に精通していない開発者、Maven の経験が少ない開発者、または Dubbo フレームワークに慣れていない開発者に特に適しています。このトピックでは、Spring Boot を使用して Dubbo アプリケーションをゼロから開発し、SAE サービスレジストリを使用してサービスの登録と検出を行う方法について説明します。
前提条件
Maven をダウンロードし、環境変数を設定します。
最新バージョンの Nacos Server をダウンロードします。
Nacos Server を起動します。
ダウンロードした Nacos Server パッケージを解凍します。
nacos/binパスに移動し、次のいずれかの方法を使用して Nacos Server を起動します。 使用する方法は OS によって異なります。Linux、UNIX、または macOS:
sh startup.sh -m standaloneコマンドを実行します。Windows:
startup.cmdファイルで、set MODE="standalone"コマンドを使用して MODE パラメーターを設定します。 その後、ファイルを実行します。
Spring Boot を使用して Dubbo アプリケーションを開発する理由
Spring Boot は、マイクロサービスアプリケーションの設定とデプロイを簡素化します。Nacos は、サービスの登録、検出、および構成管理のための機能を提供します。Spring Boot と Nacos を統合することで、従来の XML ベースの方法よりも開発効率の高い Spring ベースの Dubbo サービスを迅速に構築できます。
Spring Boot に基づいて Dubbo アプリケーションを開発するには、次の 2 つの方法を使用できます。
XML 設定ファイルを使用してアプリケーションを開発する。
Spring Boot アノテーションを使用してアプリケーションを開発する。
XML 設定ファイルを使用したアプリケーションの開発の詳細については、「SAE で Dubbo アプリケーションをホストする」をご参照ください。このトピックでは、Spring Boot アノテーションを使用して Dubbo サービスを開発する方法について説明します。
デモプロジェクト
このトピックで説明されている手順を実行してプロジェクトをビルドできます。また、このトピックで使用されている デモプロジェクト をダウンロードするか、Git で git clone https://github.com/aliyun/alibabacloud-microservice-demo.git コマンドを実行してプロジェクトをクローンすることもできます。
クローンされたプロジェクトには、複数のデモプロジェクトが含まれています。このトピックで使用されるデモプロジェクトは、alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot パスに格納されています。
サービスプロバイダーを作成する
spring-boot-dubbo-providerという名前の Maven プロジェクトを作成します。必要な依存関係を
pom.xmlファイルに追加します。次のサンプルコードは、依存関係を追加する方法の例を示しています。この例では、Spring Boot 2.0.6.RELEASE が使用されています。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>Dubbo サービスプロバイダーを開発します。
すべての Dubbo サービスはインターフェースを使用して提供されます。
src/main/javaパスに、com.alibaba.edas.bootという名前のパッケージを作成します。com.alibaba.edas.bootパッケージに、SayHelloという名前のメソッドを含むIHelloServiceという名前のインターフェースを作成します。package com.alibaba.edas.boot; public interface IHelloService { String sayHello(String str); }com.alibaba.edas.bootパッケージに、IHelloServiceImplという名前のクラスを作成して、インターフェースを実装します。package com.alibaba.edas.boot; import com.alibaba.dubbo.config.annotation.Service; @Service public class IHelloServiceImpl implements IHelloService { public String sayHello(String name) { return "Hello, " + name + " (from Dubbo with Spring Boot)"; } }説明サンプルコードでは、Service アノテーションは Dubbo によって提供されるアノテーションクラスです。アノテーションクラスのフルネームは、com.alibaba.dubbo.config.annotation.Service です。
Dubbo サービスを設定します。
src/main/resourcesパスに、application.propertiesファイルまたはapplication.yamlファイルを作成し、ファイルを開きます。次の設定項目を
application.propertiesファイルまたはapplication.yamlファイルに追加します。# Dubbo コンポーネントをスキャンする基本パッケージ (例: @Service、@Reference) //日本語コメント追加 dubbo.scan.basePackages=com.alibaba.edas.boot dubbo.application.name=dubbo-provider-demo dubbo.registry.address=nacos://127.0.0.1:8848説明上記のコードの 3 つの設定項目にはデフォルト値がないため、値を指定する必要があります。
dubbo.scan.basePackagesの値は、コードにcom.alibaba.dubbo.config.annotation.Serviceとcom.alibaba.dubbo.config.annotation.Referenceが含まれるパッケージです。複数のパッケージはカンマ (,) で区切ります。dubbo.registry.addressの値は nacos:// で始まり、その後に Nacos Server の IP アドレスとポート番号が続きます。サンプルコードの IP アドレスはオンプレミスアドレスです。Enterprise Distributed Application Service (EDAS) 管理レジストリを使用する場合、EDAS はサンプルの IP アドレスをレジストリの IP アドレスに自動的に変更します。セルフマネージド Nacos レジストリを使用する場合は、サンプルコードの dubbo.registry.address の値をレジストリの IP アドレスに変更します。
Spring Boot の
DubboProviderエントリクラスを開発して起動します。package com.alibaba.edas.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DubboProvider { public static void main(String[] args) { SpringApplication.run(DubboProvider.class, args); } }http://127.0.0.1:8848から Nacos コンソールにログインします。左側のナビゲーションウィンドウで、[サービス] をクリックして、サービスプロバイダーのリストを表示します。リストには、
com.alibaba.edas.boot.IHelloServiceが表示されます。 サービスのサービスグループとプロバイダーの IP アドレスを照会できます。
サービスコンシューマーを作成する
spring-boot-dubbo-consumerという名前の Maven プロジェクトを作成します。必要な依存関係を
pom.xmlファイルに追加します。次のサンプルコードは、依存関係を追加する方法の例を示しています。この例では、Spring Boot 2.0.6.RELEASE が使用されています。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>Spring Boot 1.x を使用する場合は、Spring Boot 1.5.x と com.alibaba.boot:dubbo-spring-boot-starter 0.1.0 を使用してください。
説明Spring Boot 1.x のライフサイクルは 2019 年 8 月に終了しました。新しいバージョンを使用してアプリケーションを開発することをお勧めします。
Dubbo サービスコンシューマーを開発します。
src/main/javaパスに、com.alibaba.edas.bootという名前のパッケージを作成します。com.alibaba.edas.bootパッケージに、IHelloServiceインターフェイスを作成し、その中にSayHelloメソッドを定義します。package com.alibaba.edas.boot; public interface IHelloService { String sayHello(String str); }
Dubbo サービスコールのコードを開発します。
次のサンプルコードは、コントローラーでリモート Dubbo サービスを呼び出す方法の例を示しています。
package com.alibaba.edas.boot; import com.alibaba.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoConsumerController { @Reference private IHelloService demoService; @RequestMapping("/sayHello/{name}") public String sayHello(@PathVariable String name) { return demoService.sayHello(name); } }説明Reference アノテーションは com.alibaba.dubbo.config.annotation.Reference です。
次の設定項目を
application.properties or application.yamlファイルに追加します:dubbo.application.name=dubbo-consumer-demo dubbo.registry.address=nacos://127.0.0.1:8848説明上記のコードの 2 つの設定項目にはデフォルト値がないため、値を指定する必要があります。
dubbo.registry.addressの値はnacos://で始まり、その後に Nacos Server の IP アドレスとポート番号が続きます。サンプルコードの IP アドレスはオンプレミスアドレスです。Nacos Server が別のマシンにデプロイされている場合は、サンプルの IP アドレスをそのマシンの IP アドレスに変更します。
Spring Boot の
DubboConsumerエントリクラスを開発して起動します。package com.alibaba.edas.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DubboConsumer { public static void main(String[] args) { SpringApplication.run(DubboConsumer.class, args); } }http://127.0.0.1:8848から Nacos コンソールにログインします。左側のナビゲーションウィンドウで、[サービス] をクリックします。[サービス] ページで、呼び出し元サービスのリストを表示します。リストには、
com.alibaba.edas.boot.IHelloServiceが表示されます。 サービスのサービスグループと呼び出し元の IP アドレスを表示できます。
結果を確認する
`curl http://localhost:8080/sayHello/SAE`
`Hello, SAE (from Dubbo with Spring Boot)` アプリケーションを SAE にデプロイする
オンプレミス Nacos インスタンスをレジストリとして使用するアプリケーションを、アプリケーションを変更せずに SAE にデプロイできます。SAE は、実行時にオンプレミスレジストリを SAE レジストリに自動的に置き換えます。
コンソールまたは他のツールを使用してアプリケーションをデプロイできます。詳細については、「アプリケーションのデプロイ」をご参照ください。
コンソールを使用してアプリケーションをデプロイする前に、次の手順を実行してアプリケーションを実行可能な JAR パッケージまたは WAR パッケージにコンパイルします。
パッケージングプラグインの次の設定を
pom.xmlファイルに追加します。プロバイダー
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.boot.DubboProvider</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>コンシューマー
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.boot.DubboConsumer</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
mvn clean package コマンドを実行して、オンプレミスプログラムを JAR パッケージにビルドします。