Liigu sisu juurde

Alustamine

Paigaldamine

Nõuded

  • PHP 8.2 või uuem ja WordPress 6.4 või uuem
  • MySQL 8.0+ või MariaDB 10.6+. Töötlejad võtavad töid ja saabunud ajastusi SELECT ... FOR UPDATE SKIP LOCKED abil, mille vanemad serverid süntaksiveaga tagasi lükkavad.
  • mysqli või pdo_mysql (vt allpool)
  • Serveris peab olema WP-CLI, kui kasutate spetsiaalseid töötlejaid koos wp queuety work-ga
  • Laiendused pcntl ja posix PHP, kui kasutate töötlejate kogumeid koos --workers või suvanditega --min-workers/--max-workers

Queuety vajab PHP käituskeskkonnas, mis laadib WordPress ja WP-CLI, kas mysqli või pdo_mysql. See valib draiveri automaatselt, eelistades mysqli-i WordPress käituskeskkondades ja jättes pdo_mysql eraldiseisvaks või otseseks käituseks.

Kui soovite andmebaasipõhist käituskeskkonda ilma WordPress plugina kihita, vaadake Iseseisev kasutus. See kasutab sama ühendust ja käituskeskkonna tabeleid, kuid ei sisalda WordPress konksusildu ega WP-CLI registreerimist.

Väljalaske ZIP-failist

Iga GitHub väljalaske juures on saadaval queuety.zip fail: plugin koos juba installitud Composer sõltuvustega. Installige uusim versioon käsuga WP-CLI:

Shell
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

Või laadige ZIP-fail alla ja laadige see üles menüüst Plugins > Add New > Upload Plugin. See on tavalise WordPress saidi jaoks lihtsaim viis.

Composer kaudu Composer-i hallatava WordPress jaoks

Shell
composer require queuety/queuety

Seejärel aktiveerige plugin:

Shell
wp plugin activate queuety

Paketi tüüp on wordpress-plugin. Composer paigutab selle pluginate kataloogi ainult siis, kui projekt nõuab composer/installers ja seostab selle tüübi paigaldaja teega, nagu teeb Bedrock, ning projekt peab laadima oma vendor/autoload.php (seda teeb ka Bedrock). Ilma composer/installers-ta paigaldab Composer selle asukohta vendor/queuety/queuety, kust WordPress seda ei leia, seega kasuta tavalisel WordPress-paigaldusel väljalaske ZIP-faili.

Lähtekoodist arenduse ajal

Paiguta hoidla asukohta wp-content/plugins/queuety ja seejärel paigalda PHP sõltuvused:

Shell
composer install
wp plugin activate queuety

Aktiveerimisel loob Queuety oma andmebaasitabelid (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), et töölised saaksid töid otse kohast MySQL võtta.

Vaikimisi ajastab plugin iga minut ka ühekordse töölise, kasutades WordPress cron-i järjekorra default jaoks. See annab shellita baaslahenduse töödele ja töövoogudele, mis jäävad default-i, eeldusel et WordPress cron käivitub. Iga käivitus töötleb kõige rohkem ühe töö ega käivita korduvaid ajastusi, taasta aegunud töid ega kontrolli töövoogude tähtaegu; need toimingud käivad ainult kaua töötavas wp queuety work protsessis (#14). Kohandatud järjekordade, korduvate ajastuste, väiksema viivituse või suurema koormuse jaoks kasuta spetsiaalseid wp queuety work protsesse.

Konfiguratsioon

Kõik konstandid on valikulised. Määra need failis wp-config.php enne plugina laadimist või enne, kui Queuety käivitub manustatud teemastiilis paigalduse korral:

Konstant Vaikeväärtus Kirjeldus
QUEUETY_RETENTION_DAYS 7 wp queuety purge ja Queuety::purge() vaikimisi vanus päevades. Midagi ei kustutata automaatselt
QUEUETY_LOG_RETENTION_DAYS 0 Config::log_retention_days() loeb seda, kuid veel ei kasuta; logisid säilitatakse, kuni kutsud välja Queuety::purge_logs() (#15)
QUEUETY_MAX_EXECUTION_TIME 300 Töö maksimaalne kestus sekundites enne ajalõppu (veel ei jõustata, vt Jobs)
QUEUETY_WORKER_SLEEP 1 Ooteaeg sekundites, kui järjekord on tühi
QUEUETY_WORKER_MAX_JOBS 1000 Tööde arv, mille järel tööline taaskäivitub
QUEUETY_WORKER_MAX_MEMORY 128 Töömälu maksimum MB-des enne töölise taaskäivitumist
QUEUETY_RETRY_BACKOFF exponential Ooteaja strateegia: exponential, linear või fixed
QUEUETY_STALE_TIMEOUT 600 Ooteaeg sekundites, enne kui takerdunud tööd taastatakse
QUEUETY_CACHE_TTL 5 Vahemälu vaikeväärtuse TTL sekundites
QUEUETY_DEBUG false Luba üksikasjalik töölise logimine
QUEUETY_CLI_COMMAND queuety Juurkataloogi WP-CLI käsu nimi
QUEUETY_TABLE_PREFIX queuety_ Kõigi Queuety tabelite ühine põhinimi pärast WordPress DB-prefiksit
QUEUETY_TABLE_JOBS queuety_jobs Tööde tabeli nimi
QUEUETY_TABLE_WORKFLOWS queuety_workflows Töövoogude tabeli nimi
QUEUETY_TABLE_LOGS queuety_logs Logide tabeli nimi
QUEUETY_TABLE_SCHEDULES queuety_schedules Ajastuste tabeli nimi
QUEUETY_TABLE_SIGNALS queuety_signals Signaalide tabeli nimi
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES queuety_workflow_dependencies Töövoogude sõltuvuste ootetabeli nimi
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS queuety_workflow_dispatch_keys Püsivate töövoogude idempotentsustabeli nimi
QUEUETY_TABLE_CHUNKS queuety_chunks Voogedastatavate osade tabeli nimi
QUEUETY_TABLE_QUEUE_STATES queuety_queue_states Järjekordade olekute tabeli nimi
QUEUETY_TABLE_WEBHOOKS queuety_webhooks Veebihaakide tabeli nimi
QUEUETY_TABLE_LOCKS queuety_locks Lukkude tabeli nimi
QUEUETY_TABLE_BATCHES queuety_batches Partiide tabeli nimi
QUEUETY_TABLE_WORKFLOW_EVENTS queuety_workflow_events Töövoo sündmuslogi tabeli nimi
QUEUETY_TABLE_ARTIFACTS queuety_artifacts Töövoo artefaktide tabeli nimi
QUEUETY_TABLE_STATE_MACHINES queuety_state_machines Olekumasinate tabeli nimi
QUEUETY_TABLE_STATE_MACHINE_EVENTS queuety_state_machine_events Olekumasina sündmuslogi tabeli nimi
QUEUETY_DB_DRIVER auto MySQL draiver: auto, mysqli või pdo. auto eelistab mysqli, kui WordPress on laaditud, muul juhul pdo_mysql ja seejärel mysqli

Ressursside vastuvõtu ja kohanduva töötlusjõudluse konstandid (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) on loetletud lehel Workers.

QUEUETY_TABLE_PREFIX muudab ainult tabelinimede osa Queuety. Andmebaasi prefiks WordPress ümbritseb tulemust endiselt, seega $wpdb->prefix = 'wp_' ja QUEUETY_TABLE_PREFIX = 'themequeue_' loovad näiteks selliseid tabeleid nagu wp_themequeue_jobs. Üksikute tabelite puhul on selgesõnalistel konstantidel QUEUETY_TABLE_* endiselt eelis.

Eraldiseisvate ühenduste puhul saab ka määrata ühendusepõhise tabeliprefiksi Queuety:

PHP
$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
    table_prefix: 'themequeue_',
);

See säilitab andmebaasiprefiksi WordPress ja muudab ainult tabeli Queuety segmenti.

Sinu esimene töö

Loo käsitlejaklass, mis rakendab liidest Handler:

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,
        ];
    }
}

Registreeri see ja saada töö järjekorda:

PHP
use Queuety\Queuety;

Queuety::register( 'send_email', SendEmailHandler::class );

Queuety::dispatch( 'send_email', [
    'to'      => 'user@example.com',
    'subject' => 'Welcome',
    'body'    => 'Hello from Queuety!',
] );

Või kasuta tänapäevast väljakutsutava töö klassi:

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!' );

Sinu esimene töövoog

Määra sammu käsitlejad, mis rakendavad liidest Step:

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 [];
    }
}

Saada töövoog järjekorda:

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

Käivita tööline

Shell
wp queuety work

Tööline otsib ootel töid, käivitab need, viib töövooge edasi ja jääb tühja järjekorra korral ootama. Peatamiseks vajuta Ctrl+C; see lõpetab protsessi kohe, ka keset tööd (vt Workers).

Ülaltoodud SendEmailHandler saadab oma tööd järjekorda emails, kasutades config(), seega järjekorda default jälgiv tööline neid kätte ei saa. Nimeta kõik kasutatavad järjekorrad:

Shell
wp queuety work --queue=emails,default

Kui sa spetsiaalset töölist ei käivita, on Queuety-il endiselt eespool kirjeldatud kord minutis käivitatav vaikimisi varulahendus WordPress cron, mis on piiratud järjekorraga default ja ühe tööga käivituse kohta. Spetsiaalne tööline pakub suuremat läbilaskevõimet ja väiksemat viivitust.

Tootmiskeskkonnas käivita mitu töölist:

Shell
wp queuety work --workers=4

Töötle mitut järjekorda prioriteetsuse järjekorras:

Shell
wp queuety work --queue=high,default,low

Mis edasi

  • Jobs täieliku järjekorda saatmise ja käsitlemise juhendi jaoks
  • Workflows ahelate, paralleelsete sammude, tingimuslike harude ja töövoogude käivitamise kohta
  • Middleware piirkiiruse, pärssimise ja kohandatud töötlusahela loogika jaoks
  • Batching töögruppide saatmiseks koos tagasihelistustega
  • Streaming Steps voogedastatud andmete salvestamiseks osade kaupa
  • Scheduling korduvate tööde jaoks
  • Caching ühendatava vahemälukihi jaoks
  • Testing QueueFake'i ja testiväidete jaoks
  • CLI Reference kõigi saadaolevate käskude jaoks
  • PHP API programmiliseks juurdepääsuks