6

私はLaravel 5.1を使用しており、処理に約2分かかるタスクがあり、このタスクは特にレポートを生成しています...

ここで、ユーザーの入力を取得した同じページでユーザーを 2 分間待たせることはできないことは明らかです。代わりに、このタスクをバックグラウンドで処理し、タスクの完了について後でユーザーに通知する必要があります...

したがって、これを達成するために、Laravel はQueuesバックグラウンドでタスクを実行する機能を提供します (私が間違って理解していなければ)、マルチユーザー環境、つまり複数のユーザーがレポートの生成を要求する場合 (4 人のユーザーがいるとします)、という名前の機能はQueues、タスクが次々に実行されることを意味しますか?

タスクを次々と完了する場合Queues、ユーザーの要求に応じてバックグラウンドで即座に処理され、後でタスクが完了したときにユーザーに通知を受け取ることができるタスクはありますか??

4

2 に答える 2

0

キューベースのアーキテクチャはそれより少し複雑です。Queue は、rabbitMQ、beanstalkd などのさまざまなメッセージング実装へのインターフェースを提供します。
コードの任意の時点で、送信メッセージをキューに送信します。これは、このコンテキストでは JOB と呼ばれます。これで、キューには、FIFO シーケンスのように出る準備ができている複数のジョブがあります。

あなたの質問によると、キューをリッスンするワーカーがあり、ジョブを取得して実行します。必要な労働者の数はあなた次第です。ワーカーが 1 つある場合、タスクは次々に実行され、ワー​​カーが増えると並列プロセスが増えます。

Artisanというlaravelのコマンドラインインターフェースでワーカープロセスを起動します。各プロセスは 1 つのワーカーを意味します。スーパーバイザーで複数のワーカーを起動できます。

于 2016-09-12T11:47:56.180 に答える
0

約 2 分後にユーザーに通知を送信することが確実にわかっているため、cron ジョブを使用して、2 分ごとにレポートを生成するかどうかを確認することをお勧めします。存在する場合は、ユーザーに通知を送信できます。そのチェックは単純な 1 つのクエリになるため、パフォーマンスについてそれほど心配する必要はありません。

于 2016-09-13T07:37:57.767 に答える