Kezdő lépések
Telepítés
Követelmények
- PHP 8.2 vagy újabb és WordPress 6.4 vagy újabb
- MySQL 8.0+ vagy MariaDB 10.6+. A workerek
SELECT ... FOR UPDATE SKIP LOCKEDsegítségével veszik át a feladatokat és az esedékes ütemezéseket; a régebbi szerverek ezt szintaktikai hibával utasítják el. mysqlivagypdo_mysql(lásd alább)- WP-CLI a szerveren, ha dedikált workereket futtat
wp queuety worksegítségével - A
pcntlésposixPHP bővítmények, ha worker-készleteket futtat--workersvagy--min-workers/--max-workerssegítségével
A Queuety használatához a WordPress és WP-CLI elemeket betöltő PHP futtatókörnyezetben vagy mysqli, vagy pdo_mysql szükséges. A rendszer automatikusan választ meghajtót: a WordPress futtatókörnyezetekben a mysqli megoldást részesíti előnyben, az önálló vagy közvetlen futtatókörnyezeti használathoz pedig elérhetővé teszi a pdo_mysql megoldást.
Ha az adatbázis-alapú futtatókörnyezetet a WordPress bővítményréteg nélkül szeretné használni, lásd az Önálló használat oldalt. Ez az útvonal ugyanazt a kapcsolatot és futásidejű táblákat használja, de nem tartalmazza a WordPress hookhidakat és a WP-CLI regisztrációt.
A kiadási zipből
Minden GitHub kiadás tartalmaz egy queuety.zip csomagot: a bővítményt, amelynek Composer függőségei már telepítve vannak. Telepítse a legfrissebbet a WP-CLI paranccsal:
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate
Vagy töltse le a zipfájlt, és töltse fel a Bővítmények > Új hozzáadása > Bővítmény feltöltése oldalon. Ez a legegyszerűbb megoldás egy hagyományos WordPress webhelyhez.
Composer használatával, Composer által kezelt WordPress-hez
composer require queuety/queuety
Ezután aktiválja a bővítményt:
wp plugin activate queuety
A csomag típusa wordpress-plugin. A Composer csak akkor helyezi el a bővítménykönyvtárban, ha a projektnek szüksége van a composer/installers elemre, és ezt a típust telepítési útvonalhoz rendeli, ahogy a Bedrock teszi; emellett a projektnek be kell töltenie a saját vendor/autoload.php elemét (ezt a Bedrock is megteszi). composer/installers nélkül a Composer a vendor/queuety/queuety könyvtárba telepíti, ahol a WordPress nem találja meg, ezért egyszerű WordPress telepítés esetén használja a kiadási zipet.
Forráskódból fejlesztés közben
Helyezze az adattárat ide: wp-content/plugins/queuety, majd telepítse a PHP függőségeket:
composer install
wp plugin activate queuety
Aktiváláskor a Queuety létrehozza az adatbázistábláit (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), hogy a workerek közvetlenül a MySQL rendszerből vehessék át a feladatokat.
Alapértelmezés szerint a bővítmény percenként egy egyszeri workert is ütemez a WordPress cron segítségével, a default sorhoz. Ez parancsértelmező nélküli alapmegoldást kínál a default rendszeren maradó feladatokhoz és munkafolyamatokhoz, amennyiben a WordPress cron rendszeresen lefut. Minden futás legfeljebb egy feladatot dolgoz fel, és nem futtat ismétlődő ütemezéseket, nem állítja helyre az elakadt feladatokat, és nem ellenőrzi a munkafolyamatok határidejét; ezek csak egy hosszú ideig futó wp queuety work folyamatban futnak (#14). Egyéni sorokhoz, ismétlődő ütemezésekhez, kisebb késleltetéshez vagy nagyobb terheléshez váltson dedikált wp queuety work folyamatokra.
Konfiguráció
Minden állandó megadása opcionális. Definiálja őket a wp-config.php fájlban a bővítmény betöltése előtt, vagy egy beágyazott, sablonstílusú telepítésben a Queuety indulása előtt:
| Állandó | Alapérték | Leírás |
|---|---|---|
QUEUETY_RETENTION_DAYS |
7 |
A wp queuety purge és Queuety::purge() alapértelmezett kora napokban. Automatikus törlés nincs |
QUEUETY_LOG_RETENTION_DAYS |
0 |
A Config::log_retention_days() beolvassa, de még nem használja; a naplók megmaradnak, amíg meg nem hívja a Queuety::purge_logs() függvényt (#15) |
QUEUETY_MAX_EXECUTION_TIME |
300 |
Feladatonkénti maximális időtartam másodpercben a túllépés előtt (még nincs kikényszerítve, lásd a Feladatok oldalt) |
QUEUETY_WORKER_SLEEP |
1 |
Várakozás másodpercben, ha a sor üres |
QUEUETY_WORKER_MAX_JOBS |
1000 |
Feladatok maximális száma a worker újraindítása előtt |
QUEUETY_WORKER_MAX_MEMORY |
128 |
Maximális memóriahasználat MB-ban a worker újraindítása előtt |
QUEUETY_RETRY_BACKOFF |
exponential |
Késleltetési stratégia: exponential, linear vagy fixed |
QUEUETY_STALE_TIMEOUT |
600 |
Várakozás másodpercben az elakadt feladatok helyreállítása előtt |
QUEUETY_CACHE_TTL |
5 |
Alapértelmezett gyorsítótár-élettartam másodpercben |
QUEUETY_DEBUG |
false |
Részletes worker-naplózás engedélyezése |
QUEUETY_CLI_COMMAND |
queuety |
A gyökér WP-CLI parancs neve |
QUEUETY_TABLE_PREFIX |
queuety_ |
Az összes Queuety tábla közös alapneve a WordPress adatbázis-előtag után |
QUEUETY_TABLE_JOBS |
queuety_jobs |
A feladatok táblájának neve |
QUEUETY_TABLE_WORKFLOWS |
queuety_workflows |
A munkafolyamatok táblájának neve |
QUEUETY_TABLE_LOGS |
queuety_logs |
A naplók táblájának neve |
QUEUETY_TABLE_SCHEDULES |
queuety_schedules |
Az ütemezések táblájának neve |
QUEUETY_TABLE_SIGNALS |
queuety_signals |
A jelek táblájának neve |
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES |
queuety_workflow_dependencies |
A munkafolyamat-függőségi várakozások táblájának neve |
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS |
queuety_workflow_dispatch_keys |
A tartós munkafolyamat-azonosítók kezelésére szolgáló tábla neve |
QUEUETY_TABLE_CHUNKS |
queuety_chunks |
A streamelt adatrészek táblájának neve |
QUEUETY_TABLE_QUEUE_STATES |
queuety_queue_states |
A sorállapotok táblájának neve |
QUEUETY_TABLE_WEBHOOKS |
queuety_webhooks |
A webhookok táblájának neve |
QUEUETY_TABLE_LOCKS |
queuety_locks |
A zárolások táblájának neve |
QUEUETY_TABLE_BATCHES |
queuety_batches |
A kötegek táblájának neve |
QUEUETY_TABLE_WORKFLOW_EVENTS |
queuety_workflow_events |
A munkafolyamat-eseménynapló táblájának neve |
QUEUETY_TABLE_ARTIFACTS |
queuety_artifacts |
A munkafolyamat-összetevők táblájának neve |
QUEUETY_TABLE_STATE_MACHINES |
queuety_state_machines |
Az állapotgépek táblájának neve |
QUEUETY_TABLE_STATE_MACHINE_EVENTS |
queuety_state_machine_events |
Az állapotgép eseménynapló táblájának neve |
QUEUETY_DB_DRIVER |
auto |
MySQL meghajtó: auto, mysqli vagy pdo. A auto a WordPress betöltésekor a mysqli megoldást részesíti előnyben; ellenkező esetben a pdo_mysql, majd a mysqli következik |
Az erőforrás-engedélyezés és az adaptív pool állandói (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) a Workerek oldalon vannak felsorolva.
A QUEUETY_TABLE_PREFIX csak a táblanevek Queuety részét módosítja. A WordPress adatbázis-előtag továbbra is körülveszi az eredményt, ezért a $wpdb->prefix = 'wp_' és QUEUETY_TABLE_PREFIX = 'themequeue_' például wp_themequeue_jobs táblákat eredményez. Az egyes táblákhoz megadott QUEUETY_TABLE_* állandók továbbra is elsőbbséget élveznek.
Az önálló kapcsolatok kapcsolatonként is beállíthatják a Queuety táblák előtagját:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
Így a WordPress adatbázis-előtag változatlan marad, és csak a Queuety táblarész módosul.
Az első feladat
Hozzon létre egy kezelőosztályt, amely megvalósítja a Handler interfészt:
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,
];
}
}
Regisztrálja, majd indítsa el:
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );
Vagy használja a modern, közvetlenül indítható feladatosztályt:
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!' );
Az első munkafolyamat
Adjon meg olyan lépéskezelőket, amelyek megvalósítják a Step interfészt:
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 [];
}
}
Indítsa el a munkafolyamatot:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Worker indítása
wp queuety work
A worker lekéri a függőben lévő feladatokat, végrehajtja őket, továbbviszi a munkafolyamatokat, és várakozik, ha a sor üres. Leállításhoz nyomja meg a Ctrl+C billentyűt; ezzel a folyamat azonnal véget ér, akár egy feladat közepén is (lásd a Workerek oldalt).
A fenti SendEmailHandler a config() segítségével a emails sorba küldi a feladatokat, így a default soron futó worker nem veszi fel őket. Nevezzen meg minden használt sort:
wp queuety work --queue=emails,default
Ha nem futtat dedikált workert, a Queuety továbbra is használja a fent leírt, percenként egyszer futó alapértelmezett WordPress cron megoldást, amely csak a default sorra és futásonként egy feladatra korlátozódik. A dedikált worker nagyobb teljesítményt és kisebb késleltetést biztosít.
Éles használat esetén futtasson több workert:
wp queuety work --workers=4
Több sor feldolgozása prioritási sorrendben:
wp queuety work --queue=high,default,low
Merre tovább
- Feladatok a feladatindítás és -kezelés teljes útmutatójához
- Munkafolyamatok a láncok, párhuzamos lépések, feltételes elágazások és a munkafolyamatok futtatásának leírásához
- Middleware a sebességkorlátozáshoz, a terhelésszabályozáshoz és az egyéni folyamatlogikához
- Kötegelt feldolgozás visszahívásokkal indítható feladatcsoportokhoz
- Streamelt lépések a streamelt adatok részenkénti megőrzéséhez
- Ütemezés az ismétlődő feladatokhoz
- Gyorsítótárazás a bővíthető gyorsítótárréteghez
- Tesztelés a QueueFake használatához és a tesztállításokhoz
- CLI hivatkozás az összes elérhető parancshoz
- PHP API a programozott hozzáféréshez