我知道如何使用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));
派遣(工作);
}
}
我不明白的是ShouldQueue
magic是如何工作的,因为在源代码中它似乎什么都不做
<;?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