Liberty での非同期呼び出し API
非同期呼び出し API を使用して、アプリケーション・セッション ID に基づいて、Session Initiation Protocol (SIP) アプリケーション・セッションで処理する必要があるイベントをクラスター内の任意のサーバーに転送します。
非同期呼び出し API (非同期作業ディスパッチャーとも呼ぶ) は、関連するアプリケーション・セッション ID を使用して、SIP アプリケーション・セッションのコンテキストで処理する必要があるイベントをクラスター内の任意のサーバーに転送できます。このような転送は通常、別のサーバー上の SIP セッションに状態変更を引き起こすイベントによってトリガーされます。 非同期作業ディスパッチャーは、イベント・タスクを、実行する必要がある正しいサーバーに転送します。
Liberty では、関連するすべての SIP メッセージはクラスター内の同一サーバーに送達され、セッションは常に同じ SIP コンテナー内にとどまります。同時発生の問題およびロッキングを防止するために、同じアプリケーション・セッション内のタスクは同時に (つまり、別のスレッドやプロセスで) 処理できません。これにより、特定のタイプのイベントの処理が制限されます。
SIP セッションおよび SIP アプリケーション・セッションについて詳しくは、Java™ Specification Request (JSR) 289 のセクション 6 を参照してください。
- 同じ SIP アプリケーション・セッションに関連する 2 つの要求が、2 つの異なるスレッドで同時に実行される。
例えば、メッセージ駆動型 Bean (MDB) と連携する Java Platform, Enterprise Edition のアプリケーションは、特定の SIP アプリケーション・セッションで SIP メッセージを送信するためのイベントを取得することが考えられます。 同時に、SIP コンテナーは、同じアプリケーション・セッションに接続されている別のセッションで着信 SIP メッセージを受信し、別のスレッドでそれを処理するものとします。競合状態を回避し、すべてのセッション属性が同期されるように、セッション・アクセスを同期する必要があります。SIP アプリケーション・セッションには複数の SIP セッションが含まれている可能性があるため、この場合にロッキング・メカニズムを利用するのは有効ではありません。
- 特定の SIP アプリケーション・セッションを所有していないサーバーが、非 SIP プロトコルを介して、そのセッションのコンテキストでメッセージを送信するように求める要求を受信する。
例えば、SIP ダイアログを開始する Web サービスが、使用する必要がある SIP アプリケーション・セッションを所有しているサーバーとは異なるサーバーに配置されている場合が考えられます。
非同期呼び出し API では、SIP アプリケーション・セッション ID に従って、特定のアプリケーション・コードが正しいサーバーおよび正しいスレッドで実行されることが保証されます。
- 非同期呼び出しプロセスに関与するサーバーが 2 つより多くなることがありません。一方のサーバーが作業タスクを取得し、他方のターゲット・サーバーがタスクの転送先であり、そのタスクの SIP アプリケーション・セッションを処理します。
- 非同期呼び出しにより、スレッド・セーフに作業を行うことができます。 このアプローチにより、SIP アプリケーション・セッションに関連したメッセージを処理するスレッドが 1 つのみになるため、セッションへのアクセスを同期する必要がありません。
- 非同期呼び出しは、スケーラブルなソリューションを提供するため、クラスターにサーバーが追加されてもパフォーマンスが影響を受けません。
- クロス・サーバーの呼び出しが使用されるのは必要な場合のみであるため、パフォーマンスが改善されます。