intra-mart Accel Platform 非同期仕様書 第6版 2021-08-01

概要

非同期処理とは?

非同期はビジネスロジックを呼び出して処理を行うための一つの方法です。

通常のビジネスロジックの呼び出しは同期的です。 ここで言う「同期的」とは、ビジネスロジックの処理が完了するまで呼び出し側の処理が待機状態になる呼び出し方法を意味します。 同期的呼び出しを参照してください。

Overview of synchronous call

同期的呼び出し

「同期的な呼び出し」とは対照的に「非同期的な呼び出し」では、呼び出し側はビジネスロジックの終了を待たずに次の処理を続行します。 呼び出されたビジネスロジックは呼び出し元の処理とは別スレッドで開始されます。 非同期的呼び出しを参照してください。

Overview of asynchronous call

非同期的呼び出し

ビジネスロジックの実行結果の取得が重要ではない場合、非同期処理機能を利用することによって、全体的な応答を早めることが可能です。

以下のような条件を満たす処理を行う場合、処理の呼び出し側とは別のスレッドで処理を行うとユーザインタフェースの応答を早くできる場合があります。

  • 処理時間そのものは比較的短いが、ユーザインタフェースの観点からすると応答時間が長い。(数秒~数十秒程)
  • 処理の実行はリアルタイムである必要はないが、処理要求後にできるだけ早く実行したい。
  • 処理の呼び出し側では、処理の完了については特に気にする必要はない。

背景

非同期的な呼び出しによって処理を行う最も単純な方法は、スレッドを生成することです。

しかしながら、Java EE の仕様では、開発者が独自にスレッドを生成することを原則的に非推奨、または、禁止としています。

非同期処理機能を利用することによって、開発者は明示的にスレッドを作成することなく処理を非同期に行うことが可能です。

コラム

非同期処理機能では個々の処理時間が比較的短いものを対象としています。
処理時間が極端に長い場合(数十分~数時間程)は、非同期処理機能ではなく、バッチやスケジューラ等で実行することを考慮してください。

全体像

非同期処理機能の全体像(概要)に非同期処理機能の全体像の概要を示します。

Overview of asynchronous functionality

非同期処理機能の全体像(概要)

用語

非同期処理機能には以下のような構成要素があります。

タスク登録アプリケーション

タスク登録アプリケーションタスクメッセージを生成し、タスクキュー管理サービスに登録するアプリケーションです。
タスク登録アプリケーションは開発者によって提供される必要があります。

タスクキュー管理サービス

タスクキュー管理サービスタスクメッセージおよびタスクキューの登録および実行状況を管理します。

タスクキュー管理サービスを利用することで以下のようなことが可能です。

タスクキュー管理サービスはintra-mart Accel Platformの非同期処理機能から提供されます。

タスクメッセージ

タスクメッセージは非同期処理機能を利用してビジネスロジックを実行するために必要な情報です。 タスクメッセージは開発者によって提供される必要があります。

個々のタスクメッセージメッセージIDによって一意に識別されます。

詳細はタスクを参照してください。

メッセージID

タスクメッセージタスクキューに登録した時に、非同期処理機能から割り当てられる識別子です。

同じ情報を持つタスクメッセージを複数登録した場合でも、すべて異なるメッセージIDが割り当てられます。

タスク

タスクメッセージを元にし、実際にビジネスロジックを実行できる形に変換されたものがタスクです。

タスクメッセージからタスクへ変換する機能は非同期処理機能から提供されます。

タスクのクラスの実装は開発者によって提供される必要があります。

詳細はタスクを参照してください。

タスクキュー

タスクキュータスクメッセージを保存します。 タスクキューはその形態によってさらに以下の2種類に分類されます。

並列タスクキュー

並列タスクキューは、同時に処理を行うことが可能なタスクメッセージのみで構成されるタスクキューです。 並列処理機能で利用されます。

並列タスクキュー は 非同期処理機能 から テナント 内に一つのみ提供されます。

並列処理機能および並列タスクキューの詳細については並列処理機能を参照してください。

直列タスクキュー

直列タスクキューは、逐次的に処理を行うことが必要なタスクメッセージのみで構成されるタスクキューです。 直列処理機能 で利用されます。

直列タスクキューは複数存在することが可能です。 直列タスクキューはそれぞれ異なるキューIDを割り当てる必要があります。

直列タスクキューはAPIを通じて自由に登録または削除することが可能です。

直列タスクキューは開発者および管理者によって管理される必要があります。

複数のタスクが存在し、以下の条件のいずれかに該当する場合は「直列処理が必要」とみなされます。

  • タスク間に明確な順序関係が存在する
  • 直前のタスクが完了した後でなければ、次のタスクを開始してはいけない

なお、直列タスクキューが異なれば、複数のタスクが同時に実行される場合もあります。

タスク処理サービス

タスク処理サービスタスクキューに登録されたタスクメッセージを先頭から取得し、タスク実行エンジンに渡します。 タスクメッセージタスクキューに登録された順に処理されます。

タスク処理サービスはintra-mart Accel Platformのサービスの一つであり、非同期処理機能から提供されます。

タスク実行エンジン

タスク実行エンジンタスク処理サービスから渡されたタスクメッセージを元にタスクを生成し、ビジネスロジックを非同期で実行します。

タスク実行エンジンは非同期処理機能から提供されます。

タスク実行エンジンは1つのタスク処理サービスに対して1つのみ起動されます。

タスク管理アプリケーション

タスク管理アプリケーションタスク処理サービスを通じてタスクキューや、そこに登録されているタスクキューを管理または操作するアプリケーションです。

タスク管理アプリケーションは非同期処理機能からも提供されますが、開発者が独自に作成することも可能です。

全体の流れと非同期の種類

全体の流れ

非同期処理機能を利用する場合、概ね以下のような流れです。非同期処理機能の流れおよび非同期処理機能のシーケンスも参照してください。

  1. タスク登録アプリケーションからタスクキュー管理サービスに対してタスクメッセージの登録を依頼します。
  2. タスクキュー管理サービスタスクメッセージを指定されたタスクキューの最後尾に登録します。
  3. タスク処理サービスタスクキュー管理サービスを通じて定期的にタスクキューを観察します。
  4. タスク処理サービスは実行可能な タスクメッセージが登録されていることを確認したらそのタスクメッセージを取得し、タスク実行エンジンに渡します。
  5. タスク実行エンジンタスクメッセージを元にしてタスクを生成し、実行します。
  6. タスク実行エンジンタスクの実行が完了したらタスクメッセージタスクキューの先頭から削除します。
Flow of asynchronous functionality

非同期処理機能の流れ

Sequence of asynchronous functionality

非同期処理機能のシーケンス

非同期処理の種類

非同期処理機能の処理方法は以下の2種類に分類されます。

  • 並列処理機能

    複数のタスクを同時に実行します。
    詳細については並列処理機能を参照してください。
  • 直列処理機能

    複数のタスクの間に明確な順序関係がある場合、先行するタスクの処理が完了するまでは後続のタスクの処理をブロックします。
    詳細については直列処理機能を参照してください。