в Laravel, вы можете использовать работы выполнять задачи в серверной очереди, в то время как остальная часть приложения выполняет другие действия. У меня есть работа, которая инициируется пользовательским вводом. немедленно, через 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 делает веб-сокеты, используя pusher конечную точку, чтобы увидеть, активен ли сервер, когда вы пытаетесь развернуть новый код. Я ясно вижу сообщение, если вы откроете Devtools-> Resources-> Sockets.
Вы можете использовать события очереди, документ Laravel объясняет это: https://laravel.com/docs/5.6/queues#job-events
Завершение работы
Queue::after
Метод позволяет зарегистрировать обратный вызов, который будет выполнен, когда задание в очереди выполняется успешно. Этот обратный вызов является отличной возможностью для ведения дополнительной регистрации, постановки в очередь последующего задания или увеличения статистики для панели мониторинга.
Это уже на странице ссылки, которую вы поделились с Laravel.
Вы можете использовать функцию Queue :: after на вашем AppServiceProvider
Импортировать эти зависимости
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()
});
}