Runtime Manager エージェントアーキテクチャ

Anypoint Runtime Manager エージェントは Mule JAVA API をサービスとして公開する Mule プラグインで、ユーザーは外部システムから Mule インスタンスを操作および監視することができます。

このドキュメントでは、Runtime Manager エージェントのアーキテクチャと主要コンポーネントの概要を説明します。

Runtime Manager エージェントの主要コンポーネント

Mule サービス

Mule に接続します。このコンポーネントでは、トランスポート層 (メッセージがユーザーによって、またはユーザーに伝達される方法) は認識されません。

トランスポート

通信層を処理します。キープアライブ状況、セキュリティ、プロトコルが含まれます。

外部メッセージハンドラー

Web サービス API をユーザーに公開します。受信メッセージ (デプロイメント要求など) はすべて外部メッセージハンドラーによって処理されます。要求に応じて 1 つまたは複数の Mule サービスが実行されます。

内部メッセージハンドラー

Mule 通知を受信するたびに Mule サービスによってコールされます。

メッセージング

エージェントには、次に示すように Mule と通信を行う 3 通りの方法があります。

同期通信

例: デプロイされたアプリケーションを取得する。

synchronous

非同期通信

例: デプロイし、デプロイメントフェーズについて通知する。

非同期

プッシュ通信

例: JMX 情報を外部システムにプッシュする。

プッシュ

アーキテクチャ図

エージェントのアーキテクチャは非常に単純です。

  • トランスポートが通信を処理します。

  • 外部メッセージハンドラーがメッセージをディスパッチします。

  • サービスが Mule に接続します。

  • 内部メッセージハンドラーが Mule 通知をディスパッチします。

3 種類 (同期、非同期、プッシュ) のメッセージそれぞれについて、各コンポーネントの相互動作を次の図に示します。

アーキテクチャ

コンポーネントの相互動作

コンポーネントの相互動作の典型的な順序を次に示します。

  1. 外部システムがエージェントに要求を送信します。

  2. 外部メッセージハンドラーが実行され、インターフェースを使用して Mule サービスをコールします。

  3. Mule サービスが Mule をコールし、対応するアクションを実行します。

  4. Mule が通知で応答します。

  5. サービスがその通知をエージェントの通知にマップし、その通知種別を処理する内部メッセージハンドラーを見つけます。

  6. 対応する内部メッセージハンドラーが実行されます。

Runtime Manager エージェント設定

Runtime Manager エージェントは起動時に $MULE_HOME/conf/mule-agent.yml ファイルから設定を読み込みます。このファイルにインストールの設定パラメーターを手動で追加し、編集する必要があります。形式は一目瞭然です。サンプルファイルをダウンロードできます。

インストール時に、クイックスタートスクリプトを使用して Runtime Manager エージェントを設定することもできます。詳細は、 「Runtime Manager エージェントのインストールまたは更新」を参照してください。

設定可能なコンポーネント

コンポーネントの属性を mule-agent.yml ファイルで設定することができます。この目的のために、クラス属性に @Configurable として注釈を付けることができます。

@Singleton
public class MyRequestHandler implements ExternalMessageHandler
{
    @Inject
    private MuleService muleService;

    @Configurable
    public String host;
    ...
}

Runtime Manager エージェントの WebSocket プロトコル

エージェントへの WebSockets 経由の通信では HTTP プロトコルが実装されます。エージェントとの間で送受信されるすべてのメッセージは、WebSocket 経由で (エージェント設定に応じて) バイナリメッセージまたはテキストとして送信される HTTP メッセージです。これらの HTTP メッセージは、エージェントの REST 通信で使用されるものと同じです。

WebSocket ハンドシェイク

ハンドシェイクは、WebSocket トランスポートに固有のプロセスです。スタートアップ時に、エージェントはコンソールに対応する (エージェント設定から取得される) WebSocket アドレスにハンドシェイク要求を送信します。この後、エージェントはハンドシェイク要求として認識できないすべての受信メッセージを無視します。ハンドシェイク要求として識別されるメッセージを受信すると、その応答が有効かどうかチェックされます。有効な場合は、エージェントはすべての受信メッセージへの応答を開始します。

ハンドシェイク要求

ハンドシェイク要求の例を次に示します。

POST handshake HTTP/1.1
Content-Type: application/json
Message-Id: ${messageId}
accept: application/json
Content-length: 1234

{
"agentVersion": "1.0.0",
"muleVersion": "${muleVersion}",
"uniqueId": "${uniqueId}"
}

ハンドシェイク要求

承認:

HTTP 200 OK
Message-Id: ${messageId}

未承認:

HTTP 401 UNAUTHORIZED
Message-Id: ${messageId}