Darbo pradžia
Diegimas
Reikalavimai
- PHP 8.2 arba naujesnė versija ir WordPress 6.4 arba naujesnė versija
- MySQL 8.0+ arba MariaDB 10.6+. Darbuotojai rezervuoja užduotis ir laiku vykdytinus tvarkaraščius naudodami
SELECT ... FOR UPDATE SKIP LOCKED, kurį senesni serveriai atmeta su sintaksės klaida. mysqliarbapdo_mysql(žr. toliau)- Serveryje turi būti WP-CLI, jei naudojate dedikuotus darbuotojus su
wp queuety work pcntlirposixPHP plėtiniai, jei darbuotojų telkinius naudojate su--workersarba--min-workers/--max-workers
Queuety reikia PHP vykdymo aplinkoje, kuri įkelia WordPress ir WP-CLI, turėti arba mysqli, arba pdo_mysql. Tvarkyklę jis pasirenka automatiškai: vykdymo aplinkose WordPress pirmenybę teikia mysqli, o pdo_mysql palieka atskirai arba tiesiogiai vykdymo aplinkai.
Jei norite naudoti duomenų baze pagrįstą vykdymo aplinką be WordPress papildinio sluoksnio, žr. Naudojimas atskirai. Šis būdas naudoja tą patį ryšį ir vykdymo aplinkos lenteles, bet neapima WordPress kabliukų sąsajų ar WP-CLI registracijos.
Iš leidimo ZIP archyvo
Kiekviename GitHub leidime yra queuety.zip išteklius: papildinys su jau įdiegtomis Composer priklausomybėmis. Įdiekite naujausią versiją naudodami WP-CLI:
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate
Arba atsisiųskite ZIP archyvą ir įkelkite jį per Plugins > Add New > Upload Plugin. Tai paprasčiausias būdas įprastai WordPress svetainei.
Per Composer, skirtą Composer valdomai WordPress aplinkai
composer require queuety/queuety
Tada suaktyvinkite papildinį:
wp plugin activate queuety
Paketo tipas yra wordpress-plugin. Composer įdeda jį į papildinių katalogą tik tada, kai projektui reikia composer/installers ir šis tipas susietas su diegimo keliu, kaip tai daro Bedrock, o pats projektas turi įkelti savo vendor/autoload.php (tai daro ir Bedrock). Be composer/installers, Composer įdiegia jį į vendor/queuety/queuety, kur jo neranda WordPress, todėl įprastame WordPress dieginyje naudokite leidimo ZIP archyvą.
Iš pradinio kodo kuriant
Įdėkite saugyklą į wp-content/plugins/queuety, tada įdiekite PHP priklausomybes:
composer install
wp plugin activate queuety
Suaktyvinus Queuety, sukuriamos duomenų bazės lentelės (queuety_jobs, queuety_workflows, queuety_logs, queuety_schedules, queuety_queue_states, queuety_webhooks, queuety_locks, queuety_signals, queuety_workflow_dependencies, queuety_workflow_dispatch_keys, queuety_batches, queuety_chunks, queuety_workflow_events, queuety_artifacts, queuety_state_machines, queuety_state_machine_events), kad darbiniai procesai galėtų rezervuoti užduotis tiesiai iš MySQL.
Pagal numatytuosius nustatymus papildinys taip pat kas minutę suplanuoja vienkartinį darbuotojo paleidimą per WordPress cron, skirtą default eilei. Taip užtikrinamas pradinis užduočių ir darbo eigų vykdymas be apvalkalo, jei jos lieka default, o WordPress cron veikia. Kiekvieno paleidimo metu apdorojama ne daugiau kaip viena užduotis; pasikartojantys tvarkaraščiai nevykdomi, užstrigusios užduotys neatkuriamos ir darbo eigų terminai netikrinami. Visa tai vyksta tik ilgai veikiančiame wp queuety work procese (#14). Jei reikia pasirinktinių eilių, pasikartojančių tvarkaraščių, mažesnio delsos laiko ar didesnės apkrovos apdorojimo, naudokite dedikuotus wp queuety work procesus.
Konfigūracija
Visos konstantos yra neprivalomos. Apibrėžkite jas faile wp-config.php prieš įkeliant papildinį arba prieš paleidžiant Queuety įdėtoje, temos tipo aplinkoje:
| Konstanta | Numatytoji reikšmė | Aprašymas |
|---|---|---|
QUEUETY_RETENTION_DAYS |
7 |
Numatytoji wp queuety purge ir Queuety::purge() saugojimo trukmė dienomis. Automatiškai niekas neišvaloma |
QUEUETY_LOG_RETENTION_DAYS |
0 |
Nuskaito Config::log_retention_days(), bet kol kas nenaudojama; žurnalai saugomi, kol iškviečiate Queuety::purge_logs() (#15) |
QUEUETY_MAX_EXECUTION_TIME |
300 |
Maksimalus vienos užduoties vykdymo laikas sekundėmis iki skirtasis laikas baigsis (dar netaikoma, žr. Užduotys) |
QUEUETY_WORKER_SLEEP |
1 |
Pauzės trukmė sekundėmis, kai eilė tuščia |
QUEUETY_WORKER_MAX_JOBS |
1000 |
Maksimalus užduočių skaičius iki darbuotojo paleidimo iš naujo |
QUEUETY_WORKER_MAX_MEMORY |
128 |
Maksimalus dydis MB iki darbuotojo paleidimo iš naujo |
QUEUETY_RETRY_BACKOFF |
exponential |
Atsitraukimo strategija: exponential, linear arba fixed |
QUEUETY_STALE_TIMEOUT |
600 |
Laikas sekundėmis iki užstrigusių užduočių atkūrimo |
QUEUETY_CACHE_TTL |
5 |
Numatytoji podėlio galiojimo trukmė sekundėmis |
QUEUETY_DEBUG |
false |
Įjungti išsamų darbuotojo žurnalų registravimą |
QUEUETY_CLI_COMMAND |
queuety |
Pagrindinės WP-CLI komandos pavadinimas |
QUEUETY_TABLE_PREFIX |
queuety_ |
Bendras visų Queuety lentelių bazinis pavadinimas po WordPress DB prefikso |
QUEUETY_TABLE_JOBS |
queuety_jobs |
Užduočių lentelės pavadinimas |
QUEUETY_TABLE_WORKFLOWS |
queuety_workflows |
Darbo eigų lentelės pavadinimas |
QUEUETY_TABLE_LOGS |
queuety_logs |
Žurnalų lentelės pavadinimas |
QUEUETY_TABLE_SCHEDULES |
queuety_schedules |
Tvarkaraščių lentelės pavadinimas |
QUEUETY_TABLE_SIGNALS |
queuety_signals |
Signalų lentelės pavadinimas |
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES |
queuety_workflow_dependencies |
Darbo eigų priklausomybių laukimo lentelės pavadinimas |
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS |
queuety_workflow_dispatch_keys |
Patvarumo darbo eigų idempotentiškumo lentelės pavadinimas |
QUEUETY_TABLE_CHUNKS |
queuety_chunks |
Srauto dalių lentelės pavadinimas |
QUEUETY_TABLE_QUEUE_STATES |
queuety_queue_states |
Eilių būsenų lentelės pavadinimas |
QUEUETY_TABLE_WEBHOOKS |
queuety_webhooks |
Žiniatinklio kabliukų lentelės pavadinimas |
QUEUETY_TABLE_LOCKS |
queuety_locks |
Užraktų lentelės pavadinimas |
QUEUETY_TABLE_BATCHES |
queuety_batches |
Paketų lentelės pavadinimas |
QUEUETY_TABLE_WORKFLOW_EVENTS |
queuety_workflow_events |
Darbo eigos įvykių žurnalo lentelės pavadinimas |
QUEUETY_TABLE_ARTIFACTS |
queuety_artifacts |
Darbo eigos artefaktų lentelės pavadinimas |
QUEUETY_TABLE_STATE_MACHINES |
queuety_state_machines |
Būsenų automatų lentelės pavadinimas |
QUEUETY_TABLE_STATE_MACHINE_EVENTS |
queuety_state_machine_events |
Būsenų automatų įvykių žurnalo lentelės pavadinimas |
QUEUETY_DB_DRIVER |
auto |
MySQL tvarkyklė: auto, mysqli arba pdo. auto teikia pirmenybę mysqli, kai įkelta WordPress, kitu atveju – pdo_mysql, o tada mysqli |
Išteklių priėmimo ir adaptyviojo telkinio konstantos (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) pateiktos puslapyje Darbuotojai.
QUEUETY_TABLE_PREFIX keičia tik lentelių pavadinimų Queuety dalį. Rezultatą vis tiek apgaubia WordPress duomenų bazės prefiksas, todėl $wpdb->prefix = 'wp_' ir QUEUETY_TABLE_PREFIX = 'themequeue_' sukuria tokias lenteles kaip wp_themequeue_jobs. Atskiroms lentelėms skirtos aiškios QUEUETY_TABLE_* konstantos turi pirmenybę.
Atskiruose ryšiuose taip pat galima nustatyti Queuety lentelės prefiksą kiekvienam ryšiui:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
Taip išsaugomas WordPress duomenų bazės prefiksas ir pakeičiamas tik Queuety lentelės segmentas.
Pirmoji užduotis
Sukurkite apdorojimo klasę, įgyvendinančią sąsają Handler:
use Queuety\Handler;
class SendEmailHandler implements Handler {
public function handle( array $payload ): void {
wp_mail( $payload['to'], $payload['subject'], $payload['body'] );
}
public function config(): array {
return [
'queue' => 'emails',
'max_attempts' => 5,
];
}
}
Užregistruokite ją ir išsiųskite:
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );
Arba naudokite šiuolaikinę išsiunčiamos užduoties klasę:
use Queuety\Contracts\Job;
use Queuety\Dispatchable;
readonly class SendEmailJob implements Job {
use Dispatchable;
public function __construct(
public string $to,
public string $subject,
public string $body,
) {}
public function handle(): void {
wp_mail( $this->to, $this->subject, $this->body );
}
}
SendEmailJob::dispatch( 'user@example.com', 'Welcome', 'Hello from Queuety!' );
Pirmoji darbo eiga
Apibrėžkite veiksmų apdorojimo funkcijas, įgyvendinančias sąsają Step:
use Queuety\Step;
class FetchDataHandler implements Step {
public function handle( array $state ): array {
$user = get_user_by( 'ID', $state['user_id'] );
return [ 'user_name' => $user->display_name ];
}
public function config(): array {
return [];
}
}
class CallLLMHandler implements Step {
public function handle( array $state ): array {
$response = wp_remote_post( 'https://api.openai.com/v1/chat/completions', [
'body' => json_encode( [ 'prompt' => "Generate report for {$state['user_name']}" ] ),
] );
return [ 'llm_response' => wp_remote_retrieve_body( $response ) ];
}
public function config(): array {
return [ 'max_attempts' => 5 ];
}
}
class FormatOutputHandler implements Step {
public function handle( array $state ): array {
$url = save_report( $state['user_name'], $state['llm_response'] );
return [ 'report_url' => $url ];
}
public function config(): array {
return [];
}
}
Išsiųskite darbo eigą:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Paleiskite darbuotoją
wp queuety work
Darbuotojas tikrina, ar yra laukiančių užduočių, jas vykdo, tęsia darbo eigas ir užmigdo procesą, kai eilė tuščia. Paspauskite Ctrl+C, kad sustabdytumėte; procesas baigiamas iškart, net jei užduotis vykdoma (žr. Darbuotojai).
Aukščiau pateiktas SendEmailHandler siunčia užduotis į emails eilę per config(), todėl default veikiantis darbuotojas jų nepaima. Nurodykite kiekvieną naudojamą eilę:
wp queuety work --queue=emails,default
Jei nenaudojate dedikuoto darbuotojo, Queuety vis tiek turi pirmiau aprašytą numatytąją WordPress cron atsarginę parinktį, veikiančią kartą per minutę. Ji taikoma tik default eilei ir apdoroja vieną užduotį per paleidimą. Dedikuotas darbuotojas užtikrina didesnį našumą ir mažesnį delsos laiką.
Gamybinėje aplinkoje paleiskite kelis darbuotojus:
wp queuety work --workers=4
Apdorokite kelias eiles pagal prioritetus:
wp queuety work --queue=high,default,low
Kas toliau
- Užduotys – išsamus siuntimo ir apdorojimo vadovas
- Darbo eigos – grandinės, lygiagretūs veiksmai, sąlyginės šakos ir darbo eigų vykdymas
- Tarpinė programinė įranga – dažnio ribojimas, apkrovos ribojimas ir pasirinktinė konvejerio logika
- Grupavimas – užduočių grupių siuntimas su atgalinio iškvietimo funkcijomis
- Srautinės veiksmų sekos – srautinio perdavimo duomenų išsaugojimas dalimis
- Planavimas – pasikartojančios užduotys
- Podėliavimas – prijungiamasis podėlio sluoksnis
- Testavimas – QueueFake ir testų patvirtinimai
- CLI Žinynas – visos galimos komandos
- PHP API – programinė prieiga