Munkafolyamat-határidők
Határidő rendelhető a munkafolyamatokhoz. Ha egy futó munkafolyamat a megadott időtartamon belül nem fejeződik be, a Queuety sikertelennek jelöli, és opcionálisan meghív egy kezelőt. A szüneteltetett, jelzésre vagy más munkafolyamatokra váró munkafolyamatok várakozás közben nem járnak le. A határidőket egy hosszan futó wp queuety work folyamat körülbelül percenként ellenőrzi; a --once feldolgozói és a WP-Cron tartalékmechanizmus nem. Ez afféle holtember-kapcsoló a végtelenségig nem futható munkafolyamatokhoz.
Határidő beállítása
A maximális időtartam beállításához használja a must_complete_within() metódust a munkafolyamat-építőn. A határidő túllépésekor lefutó kezelő regisztrálásához használja a on_deadline() metódust.
use Queuety\Queuety;
Queuety::workflow( 'data_import' )
->then( FetchDataHandler::class )
->then( TransformDataHandler::class )
->then( LoadDataHandler::class )
->must_complete_within( hours: 24 )
->on_deadline( ImportTimeoutHandler::class )
->dispatch( [ 'source' => $url ] );
A must_complete_within() metódus elnevezett paramétereket fogad, amelyek összeadódnak:
->must_complete_within( hours: 2, minutes: 30 ) // 2.5 hours
->must_complete_within( days: 1 ) // 24 hours
->must_complete_within( seconds: 3600 ) // 1 hour
->must_complete_within( days: 1, hours: 12 ) // 36 hours
Határidőkezelő
A on_deadline() kezelőosztálynak implementálnia kell egy handle( array $state ): void metódust. A munkafolyamat nyilvános állapotát kapja meg (az összes olyan kulcsot, amely nem _ kezdetű).
class ImportTimeoutHandler {
public function handle( array $state ): void {
// Alert the team.
wp_mail(
'ops@example.com',
'Import workflow timed out',
'Workflow for source ' . ( $state['source'] ?? 'unknown' ) . ' exceeded its deadline.'
);
// Clean up partial work.
if ( isset( $state['temp_file'] ) ) {
unlink( $state['temp_file'] );
}
}
}
A határidőkezelő opcionális. Ha csak azt szeretné, hogy a munkafolyamat sikertelen legyen egyéni logika futtatása nélkül, használja a must_complete_within() metódust on_deadline() nélkül.
A határidő-ellenőrzés működése
A feldolgozó a feldolgozási ciklus részeként 60 másodpercenként ellenőrzi a lejárt határidőket. Ha olyan munkafolyamatot talál, amelynek status értéke továbbra is running, és a deadline_at értéke már elmúlt, meghívja a on_deadline kezelőt, ha regisztráltak ilyet, a munkafolyamatot a Deadline exceeded hibaüzenettel sikertelennek jelöli, és rögzít egy workflow_deadline_exceeded naplóeseményt. Maga a határidő deadline_at időbélyegként tárolódik a munkafolyamat sorában, és az indításkor, a beállított időtartamból számítódik ki.
Mi történik lejáratkor
A határidő túllépésekor a munkafolyamat állapota failed értékre változik, a hibaüzenet Deadline exceeded lesz, a regisztrált határidőkezelő szinkron módon lefut, és egy workflow_deadline_exceeded naplóbejegyzés kerül rögzítésre. A futó feladatok végrehajtás közben nem szakadnak meg, de a munkafolyamat nem lép túl a lejárt lépés határán. Ha maga a határidőkezelő dob kivételt, az csendben elkapásra kerül, a munkafolyamat pedig továbbra is sikertelenül zárul.
WorkflowBuilder metódusai
| Metódus | Leírás |
|---|---|
must_complete_within( int $seconds = 0, int $minutes = 0, int $hours = 0, int $days = 0 ) |
Beállítja a maximális időtartamot. Minden paraméter összeadódik. |
on_deadline( string $handler_class ) |
Regisztrálja a határidő túllépésekor meghívott kezelőt. |
Példa: határidő újrapróbálkozással
Ritkán hasznos újrapróbálni egy határidő miatt sikertelen munkafolyamatot. A retry_workflow() visszaállítja running értékre, és újra sorba állítja a sikertelen lépést, de nem törli és nem hosszabbítja meg a határidőt, így a következő, körülbelül egy percen belüli ellenőrzés ismét sikertelenséget okoz. Indítson inkább új munkafolyamatot.
$status = Queuety::workflow_status( $workflow_id );
if ( 'failed' === $status->status->value ) {
// Check if it was a deadline failure.
// You may want to dispatch a new workflow instead of retrying.
Queuety::retry_workflow( $workflow_id );
}
Határidő vagy alvási késleltetés
A határidők a teljes munkafolyamat időtartamára vonatkoznak. Az alvási késleltetések (->delay()) rögzített időre szüneteltetik a munkafolyamatot a lépéssor részeként. Egy 1 órás alvási késleltetésű és 2 órás határidejű munkafolyamat sikertelen lesz, ha az alvást nem számítva a lépések összesen több mint 1 órát vesznek igénybe.