共有リソース (Mule ドメイン)

Mule をオンプレミスにデプロイする場合は、デフォルトのエラーハンドラー、共有プロパティ、スケジューラープール、コネクタ設定などのグローバル設定を定義して、同じドメインにデプロイされたすべてのアプリケーションで共有できます。これを行うには、Mule ドメインを作成し、各アプリケーションからそのドメインを参照します。そうすることで、その Mule ドメインに関連付けられた各アプリケーションがドメイン内の共有リソースにアクセスできるようになります。
Mule アプリケーションは、一度に 1 つのドメインにしか関連付けることができませんので注意してください。

同じオンプレミス Mule Runtime Engine (Mule) に複数のサービスをデプロイする場合は、ドメインを使用することでパフォーマンスを高めることができます。ドメインは、すべての共有リソースに対して中央管理ポイントを提供することにより、特に ​pom.xml​ ファイルで宣言されているドメインの連動関係もドメインアプリケーション間で共有するため、クラスローディングプロセス (そしてメタスペースメモリの使用) をより効率的にします。

共有リソースにより、同じコネクタ設定セットを使用して、複数の開発チームが並行して作業を行うことができるため、チームは次のことが可能になります。

  • ドメイン内の複数のサービスを同じポートから公開できます。

  • 永続的なストレージへの接続を共有できます。

  • きちんと定義されたインターフェースを通して Mule アプリケーション間でサービスを共有できます。

  • 設定を 1 箇所のみで行うため、変更があっても Mule アプリケーション間の一貫性を保証できます。

メタデータを共有する場合は、Mule ドメインプロジェクトを Anypoint Studio で開いたままにしておいてください。そうでないと、リンク先の Mule プロジェクトでメタデータを手動で入力しなければなりません。

前提条件

  • Anypoint Studio 7.x

  • Mule Runtime Engine 4.x

  • オンプレミスでの Mule Runtime Engine の実行

制限事項

フロー、サブフロー、またはメッセージプロセッサーを共有リソースとして定義することはできません。ドメインでは、動作を共有することはできません。共有できるのはリソースのみです。

アーキテクチャ

Anypoint Studio の Mule ドメインプロジェクトには次の主要ファイルが含まれます。

File Name (ファイル名) 説明

/src/main/mule/mule-domain-config.xml

共有リソース設定ファイル。ファイル名は ​mule-domain-config.xml​ でなければなりません。

pom.xml

連動関係ファイル記述子。ドメインプロジェクトに必要なプラグインが格納された Maven POM ファイルです。

/mule-artifact.json

ドメインアーティファクトの記述子。

Mule ドメインプロジェクトをデプロイ可能な JAR ファイルにパッケージ化すると、次のファイルが含まれます。

File Name (ファイル名) 説明

mule-domain-config.xml

共有リソース設定ファイル。ファイル名は ​mule-domain-config.xml​ でなければなりません。

/repository

ドメインのすべての連動関係が登録された Maven に似たリポジトリ。

/META-INF/maven/groupId/artifactId/pom.xml

アーティファクトの Maven 記述子ファイル。

/META-INF/mule-artifact/classloader-model.json

連動関係の管理に使用する内部 Mule ファイル。

/META-INF/mule-artifact/mule-artifact.json

ドメインアーティファクトの記述子。

新規ドメインの作成

Anypoint Studio で新しいドメインを作成するには、次の手順を実行します。

  1. 上部のメニューバーで ​[File (ファイル)]​ > ​[New (新規)]​ > ​[Mule Domain Project (Mule ドメインプロジェクト)]​ を選択します。

    新規 + ドメイン
  2. 通常の Mule プロジェクトの作成時と同じ項目に値を入力します。

    作成 + 新規 + ドメイン
    • プロジェクト名を入力して Mule バージョンを選択します。

共有リソース設定

ドメインプロジェクト​を設定するには、​mule-domain-config.xml​ ファイルで 1 つ以上の共有リソースを定義します。このファイルは、Anypoint Studio で XML エディターまたはグラフィカルインターフェースを使用して編集できます。

設定 XML の編集による共有リソースの設定

ドメインの設定 XML にモジュールまたはコネクタの設定を追加することで、共有リソースを設定します。

次の例では、HTTP リスナーを共有リソースとして設定しています。

<?xml version="1.0" encoding="UTF-8"?>
<domain:mule-domain
        xmlns="http://www.mulesoft.org/schema/mule/core"
        xmlns:domain="http://www.mulesoft.org/schema/mule/ee/domain"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
        xsi:schemaLocation="
               http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
               http://www.mulesoft.org/schema/mule/ee/domain http://www.mulesoft.org/schema/mule/ee/domain/current/mule-domain-ee.xsd">

    <!-- Example configuration for an HTTP Listener-->
    <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
      <http:listener-connection host="0.0.0.0" port="8081" />
    </http:listener-config>

</domain:mule-domain>

[Global Elements (グローバル要素)] タブを使用した共有リソースの設定

Anypoint Studio の ​[Global Elements (グローバル要素)]​ タブを使用して共有リソースを設定すると、最初にドメインプロジェクトにモジュールを追加してからグローバル要素を作成できます。

たとえば、ドメインプロジェクトに HTTP 用 Anypoint Connector (HTTP Connector) を追加する手順は、次のとおりです。

  1. [Global Elements (グローバル要素)]​ タブで、​[Manage Modules (モジュールを管理)]​ をクリックします。

    ドメインのモジュール管理

  2. [Add Module (モジュールを追加)]​ をクリックします。

    ドメインへのモジュールの追加

  3. 追加するモジュールを検索し、​[Add > (追加 >)]​ をクリックします。

    ドメインへのモジュール追加の完了

  4. [Finish (完了)]​ をクリックします。

ドメインプロジェクトに HTTP Connector を追加した後に、共有リソースとして使用するグローバル要素を作成できます。

  1. [Global Elements (グローバル要素)]​ タブで、​[Create (作成)]​ をクリックします。

    ドメインの設定の作成

  2. HTTP Connector を選択し、設定プロセスを実行します。

    ドメインのコネクタ設定の作成

  3. [Global Element Properties (グローバル要素のプロパティ)]​ ウィンドウで、グローバル要素の設定可能なパラメーターを定義します。

アプリケーションのドメインへの関連付け

Mule アプリケーションは、一度に 1 つのドメインにしか関連付けることができません。Studio を使用するか、プロジェクトの ​pom.xml​ ファイルを直接編集するかのどちらかの方法で、既存の Mule アプリケーションをドメインに関連付けることができます。ドメインの連動関係を設定していない場合、Mule アプリケーションでは ​default​ ドメインが使用されます。

Mule 4.2.2 以降のバージョンを使用する場合は、次の点を考慮してください。

  • バージョンではセマンティックバージョン設定が優先されます。
    たとえば、バージョンを 1.0.1 に設定した場合、バージョン 1.0.2 以降のドメインは機能しますが、バージョン 1.0.0 のドメインは機能しません。

  • 同じグループ ID、アーティファクト ID、バージョンを使用して異なるドメインがデプロイされると、​pom.xml​ ファイル内の参照が曖昧になるおそれがあります。
    この問題を回避するには、Mule アプリケーションの ​mule-artifact.json​ ファイルでドメインフォルダーの名前を追加します。

{
  "domain": "mymuledomain-1.0.1-mule-domain"
  ...
}

Studio を使用して Mule アプリケーションをドメインに関連付ける

Studio から Mule アプリケーションをドメインに関連付けるには、次の手順を実行します。

  1. [Project Explorer] または [Package Explorer] ビューで Mule アプリケーションを右クリックします。

  2. メニューが開きますので、​[Properties (プロパティ)]​ をクリックします。

  3. [Properties (プロパティ)] で ​[Mule Project (Mule プロジェクト)]​ をクリックします。

  4. [Domain (ドメイン)]​ 項目でプロジェクトのドメインを選択します。

    割り当て + ドメイン

    ドメインを選択すると、プロジェクトの Mule Runtime Engine が自動的にドメインの Mule Runtime Engine に一致します。

これらの手順を完了したら、Studio にプロジェクトの ​pom.xml​ のドメインが含まれます。次に例を示します。

<dependencies>
  ...
  <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>mymuledomain</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <classifier>mule-domain</classifier>
      <scope>provided</scope>
  </dependency>
</dependencies>

Studio 外で Mule アプリケーションをドメインに関連付ける

Studio 外で Mule アプリケーションをドメインに関連付けるには、前の例で示しているように、ドメインの連動関係を ​pom.xml​ ファイルに追加します。

共有リソースの参照

次の ​mule-domain-config.xml​ の例では、HTTP リスナーおよび HTTP 要求設定を共有リソースとして定義します。

<?xml version="1.0" encoding="UTF-8"?>
<mule-domain xmlns="http://www.mulesoft.org/schema/mule/domain"
             xmlns:core="http://www.mulesoft.org/schema/mule/core"
             xmlns:http="http://www.mulesoft.org/schema/mule/http"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
               http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
                     http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
               http://www.mulesoft.org/schema/mule/domain http://www.mulesoft.org/schema/mule/domain/current/mule-domain.xsd">

    <http:listener-config name="HTTP_Listener_Configuration">
        <http:listener-connection host="0.0.0.0" port="8080"/>
    </http:listener-config>

    <http:request-config name="domainLevel">
        <http:request-connection host="localhost" port="9090"/>
    </http:request-config>

</mule-domain>

ドメインに関連付けられているすべての Mule アプリケーションは、プロジェクト自体の中でリソースを参照するのと同じように設定内でリソースを参照することによって共有リソースを利用できます。次の例では、HTTP リスナーコネクタが ​HTTP_Listener_Configuration​ という名前の共有リソースを参照しています。

<mule>
   <flow name="httpService">
      <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
      <set-payload value="success" />
   </flow>
</mule>

Studio のビジュアルエディターでは、コネクタのプロパティエディターの ​[Connector Configuration (コネクタ設定)]​ 項目にあるドロップダウンリストから共有リソースを選択できます。

選択 + リソース

共有リソースとのデプロイ

デフォルトでは、ドメインに関連付けられた Mule アプリケーションまたは Mule アプリケーションに関連付けられたドメインをデプロイすると、Anypoint Studio で両方がデプロイされます。このデフォルト動作を変更するには、ドメインの実行の設定を変更します。同じドメインを共有していなくても、ワークスペース内の一連の Mule アプリケーションをデプロイすることもできます。

Mule ドメインプロジェクトは、Runtime Manager ではインストールできません。

Anypoint Studio からのデプロイ

Studio からドメインプロジェクトとそれに関連付けられた Mule アプリケーションをデプロイする手順は次のとおりです。

  1. 再生ボタンの隣にあるドロップダウンメニューを開き、​[Run Configurations (設定の実行)]​ を選択します。

    実行 + 設定
  2. [General (一般)]​ タブを選択し、右側のナビゲーションメニューで現在選択されている Mule アプリケーションと常に一緒にデプロイしたいプロジェクトのボックスを選択します。

    実行 + 設定 + プロパティ

Anypoint Studio 外でのデプロイ

Studio 外でドメインプロジェクトと Mule アプリケーションをスタンドアロン Mule Runtime Engine にデプロイする手順は次のとおりです。

  1. Studio で、​[File (ファイル)]​ > ​[Export (エクスポート)]​ を選択します。

  2. [Mule]​ > ​[Anypoint Studio Project to Mule Deployable Archive (includes Studio metadata) (Anypoint Studio プロジェクトから Mule のデプロイ可能なアーカイブへ (Studio メタデータを含む))]​ を選択します。
    このプロセスによって、スタンドアロン Mule Runtime Engine にデプロイできる JAR ファイルが作成されます。

    mruntime export studio
  3. エクスポートされたドメインの JAR ファイルを ​MULE_HOME/domains​ にコピーします。

  4. デプロイする各 Mule アプリケーションとそれに関連付けられたドメインをエクスポートします。

  5. ドメインを参照する各 Mule アプリケーションのエクスポートされた JAR ファイルを ​MULE_HOME/apps​ フォルダーにコピーします。

  6. コマンドコンソールから Mule を起動します。

    Mule が起動すると、Mule アプリケーションの起動前にすべてのドメインが完全に起動しているようにするため、Mule は先に ​MULE_HOME/domains​ フォルダーで見つかったドメインをすべてデプロイしてから、次に ​MULE_HOME/apps​ フォルダーで見つかった Mule アプリケーションをすべてデプロイします。

Mule Maven プラグインを使用したドメインのデプロイ

Mule Maven プラグインを使用してドメインをローカル Mule インスタンスにデプロイできます。 手順は、​「ドメインのデプロイ」​を参照してください。

ドメインを使用することによるパフォーマンス向上の例

1 つのゲートウェイポリシー (IP 許可リストなど) も適用する HTTP プロキシアプリケーション群があるとします。各アプリケーションは同じバックエンドとやり取りします。2 GB のヒープメモリと 256 MB のメタスペースが設定された Mule インスタンスで、適切なドメインを使用せずにこれらのアプリケーションを 60 件以上、別々にデプロイすると、リソースの飽和によって TPS (毎秒のトランザクション数) が大幅に低下します。80 件のアプリケーションをデプロイすると、メモリ不足例外によってデプロイエラーとなります。
この問題は、バックエンドサーバー設定を共有するドメインを使用するだけで大幅に改善され、デプロイするアプリケーション数が 100 件を超えても、マシンリソースはバランスよく使用されて良好なパフォーマンスが維持されます。

ドメインを使用することでパフォーマンスは明らかに向上しますが、デプロイされる各アプリケーションには、共有インフラストラクチャリソースによる複雑さが追加されます。パフォーマンスへの影響を回避するため、アプリケーションを追加する前に、各アプリケーションを個別にテストすることでオーバーヘッドを特定してから、他のアプリケーションと共存させてテストしてください。