Laravel应该排队它是如何工作的

我知道如何使用ShouldQueue我的问题是它为什么会这样工作

我需要编辑我的新作业在数据库中的存储方式,因此我正在深入研究Laravel的内部结构

我要编辑的作业是从以下事件侦听器启动的:

<?php
名称空间应用程序\侦听器;
使用App\Events\NewMail;
使用Illumb\Queue\InteracticsWithQueue;
使用Illumb\Contracts\Queue\ShouldQueue;
使用App\Jobs\sendmail;
使用碳\碳;
类NewMailListener实现ShouldQueue
{
/**
*创建事件侦听器。
*
*@返回无效
*/
公共函数构造()
{
//
}
/**
*处理事件。
*
*@param NewMail$事件
*@返回无效
*/
公共函数句柄(NewMail$事件)
{
$address=$event->user->name;
$address=$event->user->email;
$type=“NewMail”;
$job=(newsendmail($type,$address,$address))->延迟(Carbon::now()->addMinutes(10));
派遣(工作);
} 
}

我不明白的是ShouldQueuemagic是如何工作的,因为在源代码中它似乎什么都不做

<?php
名称空间\合同\队列;
接口应为队列
{
//
}

我知道这是一份合同,但它没有定义任何东西。。。那么它到底在做什么呢?是否有一些自动加载发生在命名空间中

我不确定接口到底是什么,所以我看了这个:PHP Docs:Interfaces,给人的印象是,即使是为了解耦,接口也应该定义一些东西,我在ShouldQueue中没有看到

PHP文档页面上的顶部评论如下:

提供了一个接口,以便您可以描述一组函数和
然后将这些函数的最终实现隐藏在
实现类。这允许您更改的实现
这些功能不会改变您使用它的方式

但是函数的描述在哪里呢

PS-我知道这个接口/契约用于将事件侦听器本身排队,而不是我要编辑的作业。但我希望了解队列如何与事件侦听器交互,能够更好地告诉我它是如何工作的

内部Laravel检查作业、邮件或通知等是否实现了ShouldQueue接口。例如:

如果($ShouldQueue的作业实例){

https://github.com/laravel/framework/blob/5.5/src/Illuminate/Console/Scheduling/Schedule.php#L86

发表评论