このチュートリアルでは、Spring Boot アノテーションとサービスレジストリとして Nacos を使用して Dubbo サービスプロバイダーとサービスコンシューマーを構築し、Enterprise Distributed Application Service (EDAS) にデプロイする方法を説明します。ビジネス要件に基づいてレジストリを選択し、構成を管理できます。
すでに Spring Boot ベースの Dubbo アプリケーションをお持ちの場合は、このトピックをスキップして、アプリケーションを直接 EDAS にデプロイしてください。
デモプロジェクトによるクイックスタート
事前にビルドされたデモをクローンして、手動設定をスキップします:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
cd alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-bootまたは、ZIP アーカイブをダウンロードすることもできます。このチュートリアルのデモは alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot にあります。
必要な依存関係が事前設定された新しい Spring Boot プロジェクトをスキャフォールディングするには、Cloud Native App Initializer を使用します。
前提条件
開始する前に、以下が準備されていることを確認してください:
環境変数が設定された Maven がインストールされていること
最新の Nacos サーバー がダウンロードされ、スタンドアロンモードで起動していること:
ダウンロードした Nacos サーバーパッケージを展開します。
nacos/binディレクトリに移動します。サーバーを起動します:
Linux、UNIX、または macOS:
sh startup.sh -m standaloneを実行します。Windows:
startup.cmdでset MODE="standalone"を設定し、ファイルを実行します。
(オプション) オンプレミスとクラウドアプリケーション間の相互接続が設定されていること
サービスプロバイダーの作成
ステップ 1:Maven プロジェクトの設定
Maven プロジェクト spring-boot-dubbo-provider を作成し、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>ステップ 2:サービスインターフェイスの定義
src/main/java に、パッケージ com.alibaba.edas.boot を作成し、IHelloService インターフェイスを追加します:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}ステップ 3:サービスの実装
同じパッケージに、インターフェイスを実装する 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 アノテーションは、Spring Framework の @Service アノテーションではなく、Apache Dubbo の com.alibaba.dubbo.config.annotation.Service です。
ステップ 4:アプリケーションの設定
src/main/resources に application.properties (または application.yaml) を作成します:
# Base packages to scan Dubbo components (e.g., @Service, @Reference)
dubbo.scan.basePackages=com.alibaba.edas.boot
dubbo.application.name=dubbo-provider-demo
dubbo.registry.address=nacos://127.0.0.1:8848次の表に各プロパティの説明を示します。
| プロパティ | 説明 |
|---|---|
dubbo.scan.basePackages | com.alibaba.dubbo.config.annotation.Service と com.alibaba.dubbo.config.annotation.Reference をスキャンするパッケージ。複数のパッケージはカンマ (,) で区切ります。必須。デフォルト値はありません。 |
dubbo.application.name | Nacos に登録されるアプリケーション名。必須。デフォルト値はありません。 |
dubbo.registry.address | nacos:// で始まり、Nacos サーバーの IP アドレスとポートが続く必要があります。ローカル開発では 127.0.0.1:8848 を使用します。EDAS マネージドレジストリを使用して EDAS にデプロイする場合、EDAS はこのアドレスを自動的に置き換えます。自己管理の Nacos レジストリの場合は、この値をレジストリのアドレスに置き換えてください。必須。デフォルト値はありません。 |
ステップ 5:アプリケーションエントリクラスの作成
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);
}
}ステップ 6:プロバイダーの検証
Nacos コンソールを http://127.0.0.1:8848 で開き、左側のナビゲーションウィンドウで [サービス] をクリックします。サービス一覧に com.alibaba.edas.boot.IHelloService が、正しいサービスグループおよびプロバイダーの IP アドレスとともに表示されていることを確認します。
サービスコンシューマーの作成
ステップ 1:Maven プロジェクトの設定
Maven プロジェクト spring-boot-dubbo-consumer を作成し、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 は 2019 年 8 月に保守終了となりました。Spring Boot 1.x を使用する必要がある場合は、バージョン 1.5.x と com.alibaba.boot:dubbo-spring-boot-starter バージョン 0.1.0 を使用してください。新しいバージョンへのアップグレードを推奨します。
ステップ 2:サービスインターフェイスの定義
src/main/java に、パッケージ com.alibaba.edas.boot を作成し、プロバイダーで使用したものと同じ IHelloService インターフェイスを追加します:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}ステップ 3:サービス呼び出しの実装
リモート Dubbo サービスを呼び出す REST コントローラーを作成します:
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 アノテーションは、Apache Dubbo の com.alibaba.dubbo.config.annotation.Reference です。
ステップ 4:アプリケーションの設定
次のプロパティを application.properties または application.yaml に追加します:
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848| プロパティ | 説明 |
|---|---|
dubbo.application.name | Nacos に登録されるアプリケーション名。必須。デフォルト値はありません。 |
dubbo.registry.address | nacos:// で始まり、Nacos サーバーの IP アドレスとポートが続く必要があります。Nacos サーバーが別のマシンで実行されている場合は、127.0.0.1 を Nacos サーバーのアドレスに置き換えてください。必須。デフォルト値はありません。 |
ステップ 5:アプリケーションエントリクラスの作成
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);
}
}ステップ 6:コンシューマーの検証
Nacos コンソールを http://127.0.0.1:8848 で開き、左側のナビゲーションウィンドウで [サービス] をクリックします。サービスのリストに com.alibaba.edas.boot.IHelloService が、正しいサービスグループおよび呼び出し元の IP アドレスとともに表示されることを確認します。
ローカルセットアップのテスト
プロバイダーとコンシューマーの両方が実行されたら、テストリクエストを送信します:
Hello, EDAS (from Dubbo with Spring Boot)期待される応答:
Hello, EDAS (from Dubbo with Spring Boot)EDAS へのデプロイ
EDAS に統合されているアプリケーション構成管理 (ACM) は、Nacos の商用版を提供します。EDAS にデプロイすると、オンプレミスの Nacos サーバーアドレス (127.0.0.1:8848) がマネージドレジストリのアドレスに自動的に置き換えられます。
EDAS は、次のクラスタータイプへのデプロイをサポートしています。要件に基づいてクラスタータイプとデプロイ方法を選択してください。
| クラスタータイプ | ドキュメント |
|---|---|
| Elastic Compute Service (ECS) | ECS クラスターへのデプロイ |
| Container Service for Kubernetes (ACK) | Kubernetes クラスターへのデプロイ |
コンソールデプロイ用のアプリケーションのパッケージ化
EDAS コンソール経由でデプロイするには、Spring Boot Maven プラグインを pom.xml に追加し、アップロードする前に JAR パッケージをビルドします。
プロバイダーの 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>コンシューマーの 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.DubboConsumer</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>JAR パッケージをビルドします:
mvn clean package移行に関する注意
edas-dubbo-extension を使用して Dubbo アプリケーションを EDAS にデプロイすることは避けてください。この拡張機能は、Dubbo サービスガバナンスなどの EDAS の機能をサポートしていません。代わりに Nacos に移行してください。