laravelでは、 jobs を使用して、アプリケーションの残りの部分が他のことを実行している間に、バックエンドキューでタスクを実行できます。ユーザー入力によって開始されるジョブがあります。すぐに、javascriptを介して、ジョブが処理されていることをユーザーに通知します。
ジョブが正常に完了した後、同様の通知を送信できるようにしたいと思います。
私はこのようなモデル内から自分の仕事を呼んでいます:
public function doSomething() {
$job = new \App\Jobs\MyJob();
app('Illuminate\Contracts\Bus\Dispatcher')->dispatch($job);
}
これが私のジョブヘッダーの外観です。
class MyJob extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels, Queueable;
...
}
モデルジョブの呼び出しは、実際にはコントローラーメソッドからトリガーされます。
public function getDoSomething($id) {
$item = Item::findOrFail($id);
$item->doSomething();
return response()->json(true);
}
これはAJAX呼び出しによって処理されます:
$.ajax({
url: $(this).attr('href'),
type: 'GET',
dataType: 'json',
success: $.proxy(function(result) {
this.application.notification.showMessage('Job is being processed.');
}, this),
error: $.proxy(function(result) {
console.error(result);
}, this)
});
おそらく私はパーティーの人たちに遅れていますが、私が考えることができるいくつかのオプションがあります。ユーザーがフロントエンドからボタンをクリックすると、属性を無効にし、「処理中」などのテキストを指定できます。次に、次のことができます。
Forgeは、エンドポイントのプッシャーを使用してWebSocketを実行し、新しいコードをデプロイしようとしているときにサーバーがアクティブかどうかを確認していると思います。 Devtools-> Resources-> Socketsを開くと、通信がはっきりとわかります。
キューイベントを使用できます、Laravelドキュメントはそれを説明しています: https://laravel.com/docs/5.6/queues#job-events
仕事完了イベント
Queue::after
メソッドを使用すると、キューに入れられたジョブが正常に実行されたときに実行されるコールバックを登録できます。このコールバックは、追加のロギングを実行したり、後続のジョブをキューに入れたり、ダッシュボードの統計をインクリメントしたりする絶好の機会です。
これは、あなたが共有したページリンクにすでにあります Laravel 。
AppServiceProviderでQueue :: after関数を使用できます
この依存関係をインポートする
use Illuminate\Support\Facades\Queue;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;
そして、ブート方法ではそれを使用します
public function boot()
{
Queue::before(function (JobProcessing $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});
Queue::after(function (JobProcessed $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});
}