Ugrás a tartalomhoz

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 LOCKED segí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.
  • mysqli vagy pdo_mysql (lásd alább)
  • WP-CLI a szerveren, ha dedikált workereket futtat wp queuety work segítségével
  • A pcntl és posix PHP bővítmények, ha worker-készleteket futtat --workers vagy --min-workers/--max-workers segí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:

Shell
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

Shell
composer require queuety/queuety

Ezután aktiválja a bővítményt:

Shell
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:

Shell
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:

PHP
$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:

PHP
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:

PHP
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:

PHP
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:

PHP
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:

PHP
$workflow_id = Queuety::workflow( 'generate_report' )
    ->then( FetchDataHandler::class )
    ->then( CallLLMHandler::class )
    ->then( FormatOutputHandler::class )
    ->dispatch( [ 'user_id' => 42 ] );

Worker indítása

Shell
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:

Shell
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:

Shell
wp queuety work --workers=4

Több sor feldolgozása prioritási sorrendben:

Shell
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