Microservices Engine (MSE) は、Nacos、ZooKeeper、または Eureka をベースとしたマネージドサービスレジストリを提供します。本ガイドでは、Dubbo プロバイダーおよびコンシューマーを MSE Nacos インスタンスに登録し、コンシューマーがプロバイダーを検出して呼び出せるようにする手順を説明します。
仕組み
Dubbo プロバイダーが起動し、そのサービスインターフェイスを MSE 上の Nacos インスタンスに登録します。
Dubbo コンシューマーが同じ Nacos インスタンスをサブスクライブして、利用可能なプロバイダーを検出します。
コンシューマーは、サービスインターフェイスを使用して Dubbo RPC プロトコル経由でプロバイダーを呼び出します。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
ご利用の環境変数に Maven がインストールされ、設定済みであること
MSE Nacos エンジンインスタンスが作成済みであること。詳細については、「Nacos エンジンの作成」をご参照ください。
Nacos インスタンス内に名前空間が作成済みであること。詳細については、「名前空間の作成」をご参照ください。
本ガイドでは、デフォルトの Public 名前空間を使用します。
プロバイダーのセットアップ
MSE Nacos インスタンスにサービスインターフェイスを公開し、登録する Dubbo プロバイダーを作成します。
ステップ 1:Maven プロジェクトの作成と依存関係の追加
ご利用の IDE(IntelliJ IDEA、Eclipse など)で Maven プロジェクトを作成します。
dubboおよびnacos-clientの依存関係をpom.xmlファイルに追加します。<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>
ステップ 2:サービスインターフェイスの定義と実装
Dubbo サービスは Java インターフェイスとして公開されます。まずインターフェイスを定義し、その後に実装を提供します。
src/main/javaディレクトリ内にcom.alibaba.mseというパッケージを作成します。com.alibaba.mseパッケージ内に、sayHelloメソッドを持つIHelloServiceインターフェイスを作成します。package com.alibaba.mse; public interface IHelloService { String sayHello(String str); }同じパッケージ内にインターフェイスを実装する
IHelloServiceImplクラスを作成します。package com.alibaba.mse; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
ステップ 3:Dubbo サービスの設定
src/main/resourcesディレクトリ内にprovider.xmlファイルを作成します。Spring および Dubbo の XML 名前空間宣言を追加します。
<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">インターフェイスを Dubbo サービスとして公開し、レジストリをご利用の MSE Nacos インスタンスに指定します。ここで、
mse.XX.nacos.mse.aliyuncs.comは、ご利用の MSE Nacos インスタンスの実際のエンドポイントに置き換えてください。MSE コンソール のインスタンス一覧ページにある アクセス方法 列からこのエンドポイントを確認できます。説明パブリックエンドポイントを使用する場合は、事前に空のホワイトリストを設定してください。詳細については、「パブリック IP アドレスホワイトリストの設定」をご参照ください。
説明ご利用のサービスレジストリが MSE ZooKeeper インスタンスの場合、レジストリアドレスを適切に置き換えてください。詳細については、「注意事項」をご参照ください。
<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"/> <!-- mse.XX.nacos.mse.aliyuncs.com をご利用の Nacos インスタンスエンドポイントに置き換えてください --> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
ステップ 4:プロバイダーの起動
com.alibaba.mseパッケージ内にProviderクラスを作成します。このクラスは 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メソッドを実行して、サービスを起動します。
プロバイダー登録の確認
MSE コンソール にログインします。
左側のナビゲーションウィンドウで、Microservices Registry > Instances を選択し、対象の MSE インスタンスをクリックします。
インスタンスのホワイトリストを設定します。ホワイトリストに IP アドレスまたは CIDR ブロックが追加されていない場合、すべての IP アドレスからのアクセスが許可されます。
インスタンス詳細ページの左側ナビゲーションウィンドウで、Service Management > Services を選択します。プロバイダーサービスが一覧に表示されていれば、登録は成功しています。
コンシューマーのセットアップ
同じ MSE Nacos インスタンスを通じて Dubbo サービスをサブスクライブする Spring Boot コンシューマーアプリケーションを作成します。
ステップ 1:Maven プロジェクトの作成と依存関係の追加
ご利用の IDE で
spring-boot-dubbo-consumerという名前の 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>
ステップ 2:サービスインターフェイスの定義
src/main/javaディレクトリ内にcom.alibaba.mseというパッケージを作成します。プロバイダーで使用したのと同じ
IHelloServiceインターフェイスを作成します。package com.alibaba.mse; public interface IHelloService { String sayHello(String str); }
ステップ 3:プロバイダーを呼び出すコントローラーの作成
com.alibaba.mseパッケージ内にDemoConsumerControllerクラスを作成します。@Referenceアノテーションを使用して、リモート Dubbo サービスをインジェクトします。説明@Referenceアノテーションはcom.alibaba.dubbo.config.annotation.Referenceです。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); } }
ステップ 4:レジストリアドレスの設定
application.properties ファイルに以下のプロパティを追加します。
server.port=8080
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://mse.XX.nacos.mse.aliyuncs.com:8848mse.XX.nacos.mse.aliyuncs.com は、ご利用の MSE Nacos インスタンスエンドポイントに置き換えてください。
dubbo.registry.address の値は、nacos:// で始まり、その後に MSE Nacos インスタンスのエンドポイントとポートを指定する必要があります。
ステップ 5:コンシューマーの起動
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 コンソール にログインします。
左側のナビゲーションウィンドウで、Microservices Registry > Instances を選択し、対象の MSE インスタンスをクリックします。
インスタンスのホワイトリストを設定します。ホワイトリストに IP アドレスまたは CIDR ブロックが追加されていない場合、すべての IP アドレスからのアクセスが許可されます。
インスタンス詳細ページの左側ナビゲーションウィンドウで、Service Management > Services を選択します。コンシューマーサービスが一覧に表示されていれば、登録は成功しています。
エンドツーエンドのサービス呼び出しの確認
プロバイダーおよびコンシューマーの両方が実行中の状態で、コンシューマーがプロバイダーを正常に呼び出せるかテストします。
以下のコマンドを実行します。
curl http://localhost:8080/sayHello/mse期待される出力:
Hello, mseこの応答により、コンシューマーが MSE Nacos サービスレジストリ経由でプロバイダーを検出し、呼び出せていることが確認できます。