rrr*_*lsz 7 php jobs notifications laravel
在Laravel中,您可以使用作业在后端队列中执行任务,而应用程序的其余部分则可以执行其他操作。我有一项由用户输入启动的工作。立即通过javascript,我向用户发送通知,通知该工作正在处理中。
在工作成功完成后,我希望能够发出类似的通知。
我从这样的模型中调用我的工作:
public function doSomething() {
$job = new \App\Jobs\MyJob();
app('Illuminate\Contracts\Bus\Dispatcher')->dispatch($job);
}
Run Code Online (Sandbox Code Playgroud)
这是我的工作标题的样子:
class MyJob extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels, Queueable;
...
}
Run Code Online (Sandbox Code Playgroud)
模型作业调用实际上是从控制器方法触发的:
public function getDoSomething($id) {
$item = Item::findOrFail($id);
$item->doSomething();
return response()->json(true);
}
Run Code Online (Sandbox Code Playgroud)
由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)
});
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以在 AppServiceProvider 上使用 Queue::after 函数
导入这个依赖项
use Illuminate\Support\Facades\Queue;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;
Run Code Online (Sandbox Code Playgroud)
在启动方法上你会使用它
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()
});
}
Run Code Online (Sandbox Code Playgroud)
可能我参加派对迟到了,但我能想到几个选择。当用户从前端单击按钮时,您可以为其设置禁用属性和一些文本,如“处理”。然后你可以:
我认为 Forge 正在使用 pusher 端点进行 websockets,以查看当您尝试部署新代码时服务器是否处于活动状态。如果你打开 Devtools->Resources->Sockets,我可以清楚地看到通信。
工作完成事件
这Queue::after方法允许您注册一个回调,以便在排队作业成功执行时执行。此回调是执行额外日志记录、对后续作业进行排队或增加仪表板统计信息的绝佳机会。
这已经在您从Laravel共享的页面链接中了。