このトピックでは、Dubbo マイクロサービスアプリケーション用にマイクロサービスエンジン(MSE)でサービスレジストリを作成する方法について説明します。 Dubbo マイクロサービスアプリケーションは、プロバイダーとコンシューマーとして機能します。 サービスレジストリは、ZooKeeper、Eureka、または Nacos エンジンを使用し、アプリケーションのサービス登録とディスカバリをサポートし、コンシューマーがプロバイダーを呼び出すことを可能にします。
前提条件
サービスレジストリを作成する前に、以下の操作が実行されていることを確認してください。
Maven がダウンロードされ、環境変数が設定されている。
Nacos エンジンが作成されている。 詳細については、「Nacos エンジンの作成」をご参照ください。
名前空間が作成されている。 詳細については、「名前空間を作成する」をご参照ください。 このトピックでは、デフォルトの名前空間 Public が使用されます。
プロバイダーを作成する
オンプレミス環境でプロバイダーアプリケーションプロジェクトを作成し、依存関係を追加し、サービスの登録とディスカバリを設定し、Nacos をサービスレジストリとして指定します。
Maven プロジェクトを作成し、依存関係を追加します。
IntelliJ IDEA や Eclipse などの統合開発環境(IDE)で Maven プロジェクトを作成します。
[pom.xml] ファイルに dubbo と nacos-client の依存関係を追加します。
<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> </dependency> </dependencies>
Dubbo サービスプロバイダーを開発します。
すべての Dubbo サービスはインターフェースとして公開されます。
src/main/java
ディレクトリに [com.alibaba.mse] という名前のpackage
を作成します。com.alibaba.mse
パッケージに、[sayhello] メソッドを含む [ihelloservice] という名前のインターフェースを作成します。package com.alibaba.mse; public interface IHelloService { String sayHello(String str); }
インターフェースを実装するために、com.alibaba.mse パッケージに [ihelloserviceimpl] という名前のクラスを作成します。
package com.alibaba.mse; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
Dubbo サービスを設定します。
src/main/resources
ディレクトリに [provider.xml] という名前のファイルを作成し、ファイルを開きます。provider.xml
ファイルに、Spring フレームワークの XML 名前空間(xmlns)と XML スキーマインスタンス(xmlns:xsi)を追加し、Dubbo フレームワークの XML 名前空間(xmlns:dubbo)と XML スキーマインスタンス(xsi:schemaLocation)を追加します。<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
[provider.xml] ファイルで、インターフェースとクラスを Dubbo サービスとして公開します。
<dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.mse.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.mse.IHelloServiceImpl"/>
[provider.xml] ファイルで、オンプレミスの Nacos サーバーをサービスレジストリとして指定します。
<dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
説明Nacos インスタンスのパブリックエンドポイントを使用する場合は、空のホワイトリストを設定します。 詳細については、「パブリック IP アドレスのホワイトリストの構成」をご参照ください。
インスタンスリストで Nacos インスタンスを見つけ、[アクセス方法] 列で Nacos インスタンスのパブリックエンドポイントを表示します。 パブリックエンドポイントは
mse.XX.nacos.mse.aliyuncs.com
形式です。説明サービスレジストリが MSE Zookeeper インスタンスの場合は、この手順のサービスレジストリのコードを ZooKeeper インスタンスのコードに置き換える必要があります。 詳細については、「使用上の注意」をご参照ください。
サービスを開始します。
com.alibaba.mse パッケージに [provider] という名前のクラスを作成し、次のコードに基づいて Provider クラスの main 関数に Spring コンテキストを読み込み、Dubbo サービスを公開します。
package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); } }
Provider クラスの main 関数を呼び出して、Dubbo サービスを開始します。
結果を確認します。
MSE コンソール にログインします。
左側のナビゲーションペインで、
を選択します。 [インスタンス] ページで、作成した MSE インスタンスをクリックします。MSE インスタンスのホワイトリストを設定します。
ホワイトリストに IP アドレスまたは CIDR ブロックを追加しない場合、すべての IP アドレスが MSE インスタンスにアクセスできます。
インスタンス詳細ページの左側のナビゲーションペインで、
を選択します。 サービスリストにプロバイダーサービスが存在する場合、サービスは MSE インスタンスに登録されています。
コンシューマーを作成する
オンプレミス環境で Spring Boot
コンシューマーアプリケーションプロジェクトを作成し、依存関係を追加し、Dubbo サービスの購読に使用する設定を追加します。
spring-boot-dubbo-consumer
という名前の Maven プロジェクトを作成し、依存関係を追加します。
IntelliJ IDEA や Eclipse などの IDE で Maven プロジェクトを作成します。
pom.xml
ファイルにdubbo
とnacos-client
の依存関係を追加します。<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> </dependency> </dependencies>
Dubbo コンシューマーを作成します。
src/main/java
ディレクトリにcom.alibaba.mse
という名前の package を作成します。com.alibaba.mse
パッケージに、SayHello
メソッドを含むIHelloService
という名前のインターフェースを作成します。package com.alibaba.mse; public interface IHelloService { String sayHello(String str); }
次のコードを使用して、コントローラーでリモート Dubbo サービスを呼び出します。
package com.alibaba.mse; 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
設定ファイルに次の設定を追加します。server.port=8080 dubbo.application.name=dubbo-consumer-demo dubbo.registry.address=nacos://mse.XX.nacos.mse.aliyuncs.com:8848
説明dubbo.registry.address
の値はnacos://
で始まる必要があります。 nacos:// に続く IP アドレスとポート番号は、MSE Nacos サーバーのエンドポイントを表します。Spring Boot エントリクラス
SpringBootDubboConsumerApplication
を作成して起動します。package com.alibaba.mse; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootDubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDubboConsumerApplication.class, args); } }
結果を確認します。
MSE コンソール にログインします。
左側のナビゲーションペインで、
を選択します。 [インスタンス] ページで、作成した MSE インスタンスをクリックします。MSE インスタンスのホワイトリストを設定します。
ホワイトリストに IP アドレスまたは CIDR ブロックを追加しない場合、すべての IP アドレスが MSE インスタンスにアクセスできます。
インスタンス詳細ページの左側のナビゲーションペインで、
を選択します。 サービスリストにコンシューマーサービスが存在する場合、サービス登録は成功です。
結果を確認する
curl http://localhost:8080/sayHello/mse
コマンドを実行します。 Hello, mse
が返された場合、コンシューマーはプロバイダーを正常に呼び出しています。
`curl http://localhost:8080/sayHello/mse`
`Hello, mse`