lundi 5 février 2018

Laravel: how does a queue job work?

I'm using Larevel 5.5's built-in Redis queue. While I was writing a test queuing a payload, I noticed that the testing does not recognize the default queue name I have assigned in queue.php:

'connections' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'tickets', 
    ]

I'm inserting a payload to the queue like this: Job::dispacth($payload). It's working as intended in the actual non-test code.

  1. Why isn't this sending the payload to tickets queue? I have to explicitly assign a queue name for the testing. i.e. ->onQueue('tickets'). If it's ignoring it intentionally, where can I find reference to such behavior?

  2. I ended up tracing back dispatch() to see why #1 was so, but I only came to find that it is a weird (see #3) instantiation of the class Illuminate\Foundation\Bus\PendingDispatch like below:

    // Illuminate\Foundation\Bus\Dispatchable
    public static function dispatch()
    {
        return new PendingDispatch(new static(...func_get_args()));
    }
    
    // Illuminate\Foundation\Bus\PendingDispatch
    public function __construct($job)
    {
        $this->job = $job;
    }
    
    

    How does dispatch insert the payload into the queue? Is event-based, magic, or?

  3. What is new PendingDispatch(new static(...func_get_args())); exactly doing? Psecifically, I'm don't know what new static is doing as the constructor's argument. PendingDispatch's constructor doesn't even take multiple arguments.

Aucun commentaire:

Enregistrer un commentaire