ABP バックグラウンド タスクのプロデューサー/コンシューマー モデルの実装ロジック

ABP のバックグラウンド タスクは、プロデューサー/コンシューマー モデルを通じて実装されます。

ABP では、プロデューサーは `IBackgroundJobManager` インターフェイスの `AddJobAsync` メソッドを呼び出してバックグラウンド タスクを追加し、コンシューマーは `IBackgroundJobExecuter` インターフェイスの `ExecuteAsync` メソッドを呼び出してバックグラウンド タスクを実行します。プロデューサーがバックグラウンド タスクを追加すると、システムはそのタスクをバックグラウンド タスク キューに保存します。コンシューマはキューからタスクを継続的に取得し、タスクに対応するビジネス ロジックを実行します。

具体的には、プロデューサーがバックグラウンド タスクを追加すると、システムはタスクの情報をデータベースに保存します。コンシューマは、データベースから未実行のバックグラウンド タスクを定期的に取得し、バックグラウンド タスク キューに追加します。キューに実行可能なタスクがある場合、コンシューマはキューからタスクを取得し、そのタスクに対応するビジネス ロジックを実行します。実行が完了すると、コンシューマはキューからタスクを削除し、データベース内のタスクのステータスを更新します。

ABP では、バックグラウンド タスク キューは `IBackgroundJobStore` インターフェイスを通じて実装されます。このインターフェイスは、バックグラウンド タスクをキューに追加、取得、およびキューから削除するための一連のメソッドを定義します。具体的なキューの実装方法としては、データベース、Redis などが考えられます。

ABP バックグラウンド タスクの利用者は、キューにタスクがあることをどのようにして知るのでしょうか?

ABP では、バックグラウンド タスクのコンシューマーは `IBackgroundJobWorker` インターフェイスを通じて実装されます。このインターフェイスは、バックグラウンド タスクのコンシューマを開始するための `Start` メソッドを定義します。「Start」メソッドが呼び出されると、コンシューマはバックグラウンド タスク キューからタスクを継続的に取得し、タスクに対応するビジネス ロジックの実行を開始します。

具体的には、「Start」メソッドが呼び出されると、コンシューマはバックグラウンド スレッドを作成し、このスレッド内で無限ループを実行します。ループ内では、コンシューマーはバックグラウンド タスク キューからタスクを継続的に取得し、タスクに対応するビジネス ロジックを実行します。キュー内に実行可能なタスクがない場合、コンシューマは一定時間待機してから、キューからタスクを再度取得しようとします。

デフォルトでは、ABP のバックグラウンド タスク コンシューマは5秒ごとにキューからタスクを取得しようとします。キューに新しいタスクがある場合、コンシューマはそのタスクをすぐに実行します。キューに新しいタスクがない場合、コンシューマーは次の試行を待ち続けます。

デフォルトでは、ABP のバックグラウンド タスク コンシューマはシングルスレッドであることに注意してください。つまり、一度に 1 つのタスクしか実行できません。複数のタスクを同時に実行する必要がある場合は、「IBackgroundJobWorker」インターフェースの「WorkerCount」プロパティを構成することで実行できます。この属性は、コンシューマのワーカー スレッドの数、つまり同時に実行できるタスクの数を表します。

Guess you like

Origin blog.csdn.net/dongnihao/article/details/132124164