Mule Runtime シャットダウン時の HTTP 接続処理の理解

Mule Runtime Engine (Mule) は、2 フェーズのグレースフルシャットダウンプロセス (この後に強制終了が発生) を介してシャットダウン時の HTTP 接続を管理します。

このプロセスでは、まず新規接続を拒否し、​Connection: close​ シグナルを使用して既存の接続を完了できるようにします。次に、新規要求を完全に拒否し、その間にインフライト処理を終了します。最後にタイムアウト時に残っているすべての接続を強制終了します。

シームレスなスケールダウンのシナリオがサポートされているため、トラフィックを段階的にドレーンしてアプリケーションの安定性と信頼性を維持しつつ、Mule レプリカを削減できます。

HTTP 接続処理の図

この図は、Mule シャットダウン時の HTTP 接続処理の動作を示しています。

runtime http connections diagram

フェーズ 1: Mule の起動

  • Mule の状態: Mule が起動し、通常どおりに実行されます。

  • HTTP の動作: すべての受信 HTTP トラフィックが Mule にルーティングされて処理されます。特殊な処理は行われません。

推移: 停止シグナルを Mule に送信

  • 停止シグナルを Mule インスタンスに送信することでシャットダウンシーケンスが開始されます。

フェーズ 2: HTTP グレースフルシャットダウン - Mule の停止

  • トリガー: 停止シグナルの受信。

  • 期間: 設定された HTTP グレースフルタイムアウト (デフォルト: 5 秒)。ただし、このタイムアウト期間が経過する前に既存のすべての HTTP 接続が終了した場合、HTTP グレースフルシャットダウンフェーズは早期に終了し、Mule はタイムアウト期間全体を待機することはありません。

  • Mule の状態: Mule のシャットダウンが開始されるか、[stopped (停止済み)] に移行します。

  • HTTP の動作:

    • 新規接続なし: HTTP サーバーは新しい受信 TCP 接続の受け入れを停止します (アクセプターソケットが閉じる)。

    • 既存の要求とインフライト要求: 進行中の HTTP 要求 (すでに処理中のインフライト要求と、既存の確立された接続の要求) は引き続き通常どおり処理されます。ただし、現在の要求-応答サイクルが完了した後に接続を終了するように HTTP クライアントに通知する ​Connection: close​ ヘッダーがすべての応答に含まれます。

    • 早期終了: 停止シグナルを受信したときにアクティブな HTTP 接続がない場合、タイムアウト期間が終了する前でも、HTTP グレースフルシャットダウンフェーズは即座に終了します。

    • 遅れて到着した要求: HTTP 要求が HTTP グレースフルタイムアウトに達する直前に到着した場合、HTTP グレースフルシャットダウンタイムアウトを経過しても通常どおり処理されます。

推移: HTTP グレースフルシャットダウンタイムアウトが経過

  • HTTP グレースフルシャットダウンの設定された期間が終了します。

フェーズ 3: Mule グレースフルシャットダウン - Mule の停止

  • トリガー: HTTP グレースフルシャットダウンタイムアウトの終了。

  • 期間: 設定された Mule グレースフルシャットダウンタイムアウト (デフォルト: 5 秒)。

  • Mule の状態: Mule がグレースフルシャットダウンします。

  • HTTP の動作:

    • 新規要求を拒否 (503): 実行時に到着する新しい HTTP 要求は、「503 Service Unavailable」 (503 サービスを利用できません) エラーで即座に拒否されます。

    • 新規要求を拒否 (404): Mule アプリケーションコードで基盤となる HTTP サーバーの HTTP エンドポイントが登録解除されると、後続の新しい HTTP 要求で「404 Not Found」 (404 見つかりません) エラーが発生します。

    • インフライトメッセージを完了: すでに完全に読み取られた処理中の HTTP 要求 (インフライトメッセージ) の実行を通常どおりに完了できるようになります。

推移: Mule グレースフルシャットダウンタイムアウトが経過

  • Mule 全体のグレースフルシャットダウンの設定された期間が終了します。

フェーズ 4: Mule の停止

  • トリガー: Mule グレースフルシャットダウンタイムアウトの終了。

  • Mule の状態: Mule が停止します。

  • 動作: Mule プロセスが強制シャットダウンに進み、最終的に終了します。その結果、次のようになります。

    • 残りの開いているすべての HTTP 接続が突然終了します。

    • 終了時のソケットの TCP 状況によって、これらの強制終了された接続に接続されているクライアントで接続リセットエラーやパイプ破損エラーが発生する可能性があります。

シャットダウンタイムアウトの設定

HTTP グレースフルシャットダウンタイムアウトと Mule 全体のグレースフルシャットダウンタイムアウトは、シャットダウンシーケンスで異なる目的を果たしますが、Mule アプリケーションの XML ファイルの ​<configuration>​ 要素内の同じ ​shutdownTimeout​ パラメーターを使用して設定します。

ミリ秒 (デフォルトでは 5000 ミリ秒) 単位で値を指定します。これにより、両方のグレースフルシャットダウンの最大期間を制御します。次に例を示します。

<mule ...>
  <configuration shutdownTimeout="10000" /> </mule>

詳細は、​「グローバル設定リファレンス」​を参照してください。