概要¶
非同期処理とは?¶
非同期はビジネスロジックを呼び出して処理を行うための一つの方法です。
通常のビジネスロジックの呼び出しは同期的です。 ここで言う「同期的」とは、ビジネスロジックの処理が完了するまで呼び出し側の処理が待機状態になる呼び出し方法を意味します。 同期的呼び出しを参照してください。
「同期的な呼び出し」とは対照的に「非同期的な呼び出し」では、呼び出し側はビジネスロジックの終了を待たずに次の処理を続行します。 呼び出されたビジネスロジックは呼び出し元の処理とは別スレッドで開始されます。 非同期的呼び出しを参照してください。
ビジネスロジックの実行結果の取得が重要ではない場合、非同期処理機能を利用することによって、全体的な応答を早めることが可能です。
以下のような条件を満たす処理を行う場合、処理の呼び出し側とは別のスレッドで処理を行うとユーザインタフェースの応答を早くできる場合があります。
- 処理時間そのものは比較的短いが、ユーザインタフェースの観点からすると応答時間が長い。(数秒~数十秒程)
- 処理の実行はリアルタイムである必要はないが、処理要求後にできるだけ早く実行したい。
- 処理の呼び出し側では、処理の完了については特に気にする必要はない。
背景¶
非同期的な呼び出しによって処理を行う最も単純な方法は、スレッドを生成することです。
しかしながら、Java EE の仕様では、開発者が独自にスレッドを生成することを原則的に非推奨、または、禁止としています。
非同期処理機能を利用することによって、開発者は明示的にスレッドを作成することなく処理を非同期に行うことが可能です。
コラム
用語¶
非同期処理機能には以下のような構成要素があります。
タスク登録アプリケーション¶
タスクキュー管理サービス¶
タスクキュー管理サービスはタスクメッセージおよびタスクキューの登録および実行状況を管理します。
タスクキュー管理サービスを利用することで以下のようなことが可能です。
- タスクキューに対してタスクメッセージを登録または削除します。
- タスクキューの処理を活性化または非活性化します。
- 直列タスクキューを追加または削除します。
- タスクキューおよびタスクキューに現在登録されているタスクメッセージの情報を取得します。
タスクキュー管理サービスはintra-mart Accel Platformの非同期処理機能から提供されます。
タスクメッセージ¶
タスクメッセージは非同期処理機能を利用してビジネスロジックを実行するために必要な情報です。 タスクメッセージは開発者によって提供される必要があります。
個々のタスクメッセージはメッセージIDによって一意に識別されます。
詳細はタスクを参照してください。
タスク¶
タスクメッセージを元にし、実際にビジネスロジックを実行できる形に変換されたものがタスクです。
タスクメッセージからタスクへ変換する機能は非同期処理機能から提供されます。
タスクのクラスの実装は開発者によって提供される必要があります。
詳細はタスクを参照してください。
並列タスクキュー¶
並列タスクキューは、同時に処理を行うことが可能なタスクメッセージのみで構成されるタスクキューです。 並列処理機能で利用されます。
並列タスクキュー は 非同期処理機能 から テナント 内に一つのみ提供されます。
直列タスクキュー¶
直列タスクキューは、逐次的に処理を行うことが必要なタスクメッセージのみで構成されるタスクキューです。 直列処理機能 で利用されます。
直列タスクキューは複数存在することが可能です。 直列タスクキューはそれぞれ異なるキューIDを割り当てる必要があります。
直列タスクキューはAPIを通じて自由に登録または削除することが可能です。
直列タスクキューは開発者および管理者によって管理される必要があります。
複数のタスクが存在し、以下の条件のいずれかに該当する場合は「直列処理が必要」とみなされます。
タスク処理サービス¶
タスク処理サービスはタスクキューに登録されたタスクメッセージを先頭から取得し、タスク実行エンジンに渡します。 タスクメッセージはタスクキューに登録された順に処理されます。
タスク処理サービスはintra-mart Accel Platformのサービスの一つであり、非同期処理機能から提供されます。
タスク実行エンジン¶
タスク実行エンジンはタスク処理サービスから渡されたタスクメッセージを元にタスクを生成し、ビジネスロジックを非同期で実行します。
タスク実行エンジンは非同期処理機能から提供されます。
タスク管理アプリケーション¶
タスク管理アプリケーションはタスク処理サービスを通じてタスクキューや、そこに登録されているタスクキューを管理または操作するアプリケーションです。
タスク管理アプリケーションは非同期処理機能からも提供されますが、開発者が独自に作成することも可能です。
全体の流れと非同期の種類¶
全体の流れ¶
非同期処理機能を利用する場合、概ね以下のような流れです。非同期処理機能の流れおよび非同期処理機能のシーケンスも参照してください。
- タスク登録アプリケーションからタスクキュー管理サービスに対してタスクメッセージの登録を依頼します。
- タスクキュー管理サービスはタスクメッセージを指定されたタスクキューの最後尾に登録します。
- タスク処理サービスはタスクキュー管理サービスを通じて定期的にタスクキューを観察します。
- タスク処理サービスは実行可能な タスクメッセージが登録されていることを確認したらそのタスクメッセージを取得し、タスク実行エンジンに渡します。
- タスク実行エンジンはタスクメッセージを元にしてタスクを生成し、実行します。
- タスク実行エンジンはタスクの実行が完了したらタスクメッセージをタスクキューの先頭から削除します。