dimanche 27 août 2017

Updating and requeueing long-running Laravel jobs

I have a few Laravel jobs that involve long wait periods (15-60 seconds) for third party APIs to finish tasks before I can continue. It feels pretty wasteful to keep the thread locked while it polls for the job to complete.

Is there a way to update the payload / state of the job and requeue it so that the job can resume and poll again once a few other jobs have completed?


I'm thinking something like:

// In a handling method within the job.
$this->state = 'waitingForSomeTask';

// Save the payload / state of this job (this is the "missing" method)
$this->save();

// Put the task back on the queue with a five second delay
$this->release(5);

From here, the next time the job handler runs, it could pickup where it left off (job variables having been carried over) - check to see if the task is complete and continue if so; if not, it would just requeue the job again.


I haven't seen this mentioned anywhere in the official documentation or elsewhere, so is there a better / more "Laravel-esque" way to do this?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire