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