Laravel ShouldQueue, Как Это Работает
Я знаю, как использовать ShouldQueue
мой вопрос о том, почему это работает таким образом.
мне нужно отредактировать как мой new Job
хранится в базе данных, и поэтому я копаюсь во внутренних органах Laravel.
задание, которое я хочу изменить, запускается из следующего прослушивателя событий:
<?php
namespace AppListeners;
use AppEventsNewMail;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use AppJobsSendEmail;
use CarbonCarbon;
class NewMailListener implements ShouldQueue
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param NewMail $event
* @return void
*/
public function handle(NewMail $event)
{
$addressee = $event->user->name;
$address = $event->user->email;
$type = "NewMail";
$job = (new SendEmail($type,$addressee,$address))->delay(Carbon::now()->addMinutes(10));
dispatch($job);
}
}
чего я не понимаю, как ShouldQueue
магия работает, потому что в исходный код похоже, он ничего не делает.
<?php
namespace IlluminateContractsQueue;
interface ShouldQueue
{
//
}
I поймите, что это контракт но это ничего не определяющие... так что же он делает? Происходит ли автоматическая загрузка из пространства имен?
Я не был уверен, что такое интерфейс, поэтому я посмотрел на это:PHP Docs: интерфейсы и сложилось впечатление, что даже если это для развязки, а интерфейс должен определять что-то, чего я не вижу в ShouldQueue
.
верхний комментарий на этой странице PHP docs говорит это:
интерфейс обеспечен поэтому вы можете описать набор функций и затем скрыть окончательную реализацию этих функций в реализованный класс. Это позволяет изменить реализацию эти функции без изменения того, как вы используете его.
но где это описание функций здесь?
PS-Я знаю, что этот интерфейс / контракт используется для очереди самого прослушивателя событий, а не задания, которое я хочу отредактировать. Но я надеюсь, что понимание того, как очередь взаимодействует с прослушивателем событий, лучше проинформирует меня о том, как это работает для заданий.
1 ответов
внутренне Laravel проверяет, реализует ли задание или отправляемое или уведомление и т. д. ShouldQueue
интерфейс. Например:
if ($job instanceof ShouldQueue) {
https://github.com/laravel/framework/blob/5.5/src/Illuminate/Console/Scheduling/Schedule.php#L86