すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:MSE 上で Dubbo アプリケーションのサービスレジストリを構築する

最終更新日:Aug 26, 2026

このチュートリアルでは、Apache Dubbo アプリケーション用に Microservices Engine (MSE) 上でサービスレジストリを構築し、サービス登録とサービスディスカバリに使用する方法について説明します。最終的に、ローカルマシンで実行されている Dubbo コンシューマーが、MSE Nacos レジストリを介して検出したプロバイダーを呼び出します。

アーキテクチャ

このサンプルアプリケーションは、プロバイダーとコンシューマーで構成される Dubbo マイクロサービスアプリケーションです。ローカルマシン上で 2 つのロールを 2 つの個別の Maven プロジェクトとして開発し、両方ともパブリックエンドポイントを介して MSE 上の同じレジストリインスタンスに接続します。

  • プロバイダープロジェクト — ポート 28082 で com.alibaba.mse.IHelloService インターフェイスを Dubbo サービスとして公開し、そのサービスを MSE 上のレジストリインスタンスに登録します。

  • コンシューマープロジェクト — 同じレジストリインスタンスを介して com.alibaba.mse.IHelloService をサブスクライブし、プロバイダーを呼び出します。

  • MSE 上のレジストリインスタンス — プロバイダーが登録し、コンシューマーがサブスクライブするサービスレジストリとして機能します。

レジストリのタイプ

MSE は、Dubbo アプリケーション用の Nacos、ZooKeeper、または Eureka のサービスレジストリをホストできます。このチュートリアルでは MSE Nacos を使用し、このトピックのすべての設定例は MSE Nacos インスタンスを対象としています。

  • Nacos (このチュートリアルで使用) — Dubbo レジストリのアドレスを MSE Nacos インスタンスのパブリックエンドポイントに設定します。他のレジストリ固有の設定は不要です。

  • ZooKeeper — サービスレジストリとして MSE ZooKeeper を使用する場合は、ステップ 2 のレジストリコードを ZooKeeper の対応するコードに置き換えてください。詳細については、「使用上の注意」をご参照ください。

前提条件

  • Maven をダウンロードし、環境変数を設定します。

  • IntelliJ IDEA や Eclipse などの IDE がローカルマシンにインストールされています。

  • MSE Nacos インスタンスを作成します。手順については、「Nacos エンジンインスタンスの作成」をご参照ください。

  • 名前空間を作成します。このチュートリアルでは、デフォルトの名前空間 Public を使用します。

ステップ 1:プロバイダープロジェクトの作成とサービスの定義

このステップでは、プロバイダー用の Maven プロジェクトを作成し、プロバイダーが公開するサービスを定義します。Dubbo では、すべてのサービスがインターフェイスとして提供されます。

  1. IDE で、プロバイダー用の Maven プロジェクトを作成します。

  2. dubbonacos-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>
  3. src/main/java ディレクトリに、com.alibaba.mse という名前のパッケージを作成します。

  4. com.alibaba.mse に、sayHello メソッドを含む IHelloService という名前のインターフェイスを作成します。

    package com.alibaba.mse;
    
    public interface IHelloService {
        String sayHello(String str);
    }
  5. com.alibaba.mse に、インターフェイスを実装する IHelloServiceImpl という名前のクラスを作成します。

    package com.alibaba.mse;
    
    public class IHelloServiceImpl implements IHelloService {
        public String sayHello(String str) {
            return "hello " + str;
        }
    }

ステップ 2:MSE Nacos をレジストリとして使用するためのプロバイダーの設定

このステップでは、IHelloService を Dubbo サービスとして公開し、プロバイダーを MSE Nacos インスタンスに向ける provider.xml ファイルを作成します。レジストリの設定にはインスタンスのエンドポイントが必要なため、最初にそれを取得します。

  1. MSE コンソールにログインし、MSE 上に作成した Nacos インスタンスのパブリックエンドポイントを表示します。パブリックエンドポイントは、インスタンスリストの アクセス方法 列に mse.XX.nacos.mse.aliyuncs.com の形式で表示されます。

  2. プロバイダープロジェクトの src/main/resources ディレクトリに、provider.xml という名前のファイルを作成します。

  3. provider.xml に次の設定を追加します。mse.XX.nacos.mse.aliyuncs.com をお使いの Nacos インスタンスのパブリックエンドポイントに置き換えてください。

    <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: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"/>
    
        <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
    </beans>

次の表では、provider.xml の設定について説明します。

要素説明
xmlnsxmlns:xsixmlns:dubbo、および xsi:schemaLocationSpring XML 名前空間 (xmlns) と XML スキーマインスタンス (xmlns:xsi)、および Dubbo 名前空間 (xmlns:dubbo) とスキーマインスタンス (xsi:schemaLocation) を宣言します。
dubbo:applicationプロバイダーアプリケーションの名前。この例では demo-provider を使用します。
dubbo:protocolポート 28082 で Dubbo プロトコルを介してサービスを公開します。
dubbo:service および beanIHelloService インターフェイスと IHelloServiceImpl 実装クラスを Dubbo サービスとして公開します。
dubbo:registryMSE 上に作成した Nacos インスタンスをサービスレジストリとして指定します。アドレスはインスタンスのパブリックエンドポイントです。

ステップ 3:プロバイダーから MSE インスタンスへのアクセス許可

プロバイダーは MSE インスタンスのパブリックエンドポイントを介してレジストリにアクセスするため、インスタンスのホワイトリストでトラフィックを許可する必要があります。プロバイダーを起動する前に、このステップを完了してください。そうしないと、登録が失敗します。

  1. MSE コンソールで、左側メニューからマイクロサービスの登録 > インスタンス を選択します。インスタンス ページで、作成した MSE インスタンスをクリックします。

  2. インスタンスのホワイトリストをクリアします。IP アドレスやマスクを指定しない場合、すべてのアドレスがインスタンスにアクセスできます。このチュートリアルでは、空のホワイトリストを例として使用します。詳細については、「ホワイトリストの設定」をご参照ください。

警告

ホワイトリストが空の場合、すべてのアドレスが MSE インスタンスにアクセスできます。

ステップ 4:プロバイダーの起動と登録の確認

このステップでは、プロバイダーを起動し、サービスが Nacos インスタンスに登録されていることを MSE コンソールで確認します。

  1. com.alibaba.mse に、Provider という名前のクラスを作成します。次のコードを使用して、Providermain メソッドで 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();
        }
    }
  2. Providermain メソッドを実行してサービスを起動します。コンシューマーがこのプロセスを呼び出すため、チュートリアルが完了するまでプロセスを実行し続けてください。

  3. MSE コンソールで、MSE インスタンスの詳細ページに移動し、左側メニューでサービス管理 > サービス一覧 を選択します。

  4. サービスリストに、demo-provider アプリケーションが公開するインターフェイスである com.alibaba.mse.IHelloService が含まれていることを確認します。

サービスリストにインターフェイスが表示されるまで、次のステップに進まないでください。インターフェイスが表示されない場合は、次の設定を確認してください:

  • ホワイトリスト — MSE インスタンスのホワイトリストで、ローカルマシンのアドレスが許可されていること。ホワイトリストが空の場合は、すべてのアドレスが許可されます。

  • レジストリアドレスprovider.xmldubbo:registry アドレスに、mse.XX.nacos.mse.aliyuncs.com プレースホルダーではなく、インスタンスのパブリックエンドポイントが使用されていること。

  • レジストリのタイプdubbo:registry アドレスに、作成したインスタンスタイプのスキーム (MSE Nacos インスタンスの場合は nacos:// など) が使用されていること。

ステップ 5:コンシューマーの作成とサービスのサブスクライブ

このステップでは、コンシューマー用の 2 つ目の Maven プロジェクトを作成し、同じ MSE Nacos インスタンスを介して com.alibaba.mse.IHelloService をサブスクライブし、プロバイダーを呼び出すクラスを実装します。

  1. IDE で、コンシューマー用の 2 つ目の Maven プロジェクトを作成します。

  2. コンシューマープロジェクトの pom.xml ファイルに dubbonacos-client の依存関係を追加します。この依存関係は、ステップ 1 のプロバイダープロジェクトのものと同一です。

  3. src/main/java ディレクトリに com.alibaba.mse パッケージを作成し、ステップ 1 で定義した IHelloService インターフェイスを追加します。コンシューマーはインターフェイスによってサービスを参照するため、そのインターフェイスがコンシューマープロジェクトのクラスパス上にある必要があります。

  4. コンシューマープロジェクトの src/main/resources ディレクトリに、consumer.xml という名前のファイルを作成します。mse.XX.nacos.mse.aliyuncs.com を、provider.xml で設定したのと同じ Nacos インスタンスのパブリックエンドポイントに置き換えてください。

    <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:application name="demo-consumer"/>
    
        <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" />
    
        <dubbo:reference id="helloService" interface="com.alibaba.mse.IHelloService"/>
    </beans>

    dubbo:registry 要素はコンシューマーをプロバイダーと同じレジストリに向け、dubbo:reference 要素はプロバイダーが公開する com.alibaba.mse.IHelloService インターフェイスをサブスクライブします。

  5. com.alibaba.mse に、Consumer という名前のクラスを作成します。次のコードを使用して、Consumermain メソッドで Spring コンテキストをロードし、サブスクライブしたサービスの sayHello メソッドを呼び出します。

    package com.alibaba.mse;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Consumer {
        public static void main(String[] args) throws Exception {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});
            context.start();
            IHelloService helloService = (IHelloService) context.getBean("helloService");
            System.out.println(helloService.sayHello("mse"));
        }
    }

ステップ 6:コンシューマーからプロバイダーへの呼び出しの確認

このステップでは、コンシューマーが MSE Nacos レジストリを介してプロバイダーを検出し、sayHello メソッドのレスポンスを受信することを確認します。コンシューマーは引数として mse を渡し、IHelloServiceImplhello の後にその引数を付けて返します。

  1. ステップ 4 で起動したプロバイダーのプロセスがまだ実行中であることを確認します。

  2. Consumermain メソッドを実行します。

  3. コンシューマープロジェクトのコンソール出力を確認します。次の出力は、コンシューマーがプロバイダーを正常に呼び出したことを示します:

    hello mse

呼び出しが失敗した場合、または出力が返されない場合は、次の設定を確認してください:

  • プロバイダーの可用性 — プロバイダーのプロセスが実行中であり、MSE インスタンスのサービスリストに com.alibaba.mse.IHelloService が表示されていること。

  • レジストリアドレスconsumer.xmldubbo:registry アドレスが、provider.xml で設定したパブリックエンドポイントであること。

  • インターフェイス名consumer.xmldubbo:reference 要素内のインターフェイスが、provider.xmldubbo:service 要素内のインターフェイスである com.alibaba.mse.IHelloService と一致していること。

  • ホワイトリスト — MSE インスタンスのホワイトリストで、ローカルマシンのアドレスが許可されていること。