Preskoči na vsebino

Začetek

Namestitev

Zahteve

  • PHP 8.2 ali novejši in WordPress 6.4 ali novejši
  • MySQL 8.0+ ali MariaDB 10.6+. Delavci prevzemajo opravila in zapadle razporede z SELECT ... FOR UPDATE SKIP LOCKED, ki ga starejši strežniki zavrnejo s skladenjsko napako.
  • mysqli ali pdo_mysql (glejte spodaj)
  • WP-CLI na strežniku, če uporabljate namenske delavce z wp queuety work
  • Razširitvi pcntl in posix PHP, če uporabljate sklade delavcev z --workers ali --min-workers/--max-workers

Queuety zahteva bodisi mysqli bodisi pdo_mysql v izvajalnem okolju PHP, ki naloži WordPress in WP-CLI. Gonilnik izbere samodejno: za izvajalna okolja WordPress daje prednost mysqli, medtem ko pdo_mysql ostane na voljo za samostojno oziroma neposredno uporabo izvajalnega okolja.

Če želite izvajalno okolje, podprto z zbirko podatkov, brez plasti vtičnika WordPress, glejte Samostojna uporaba. Ta pot uporablja iste povezave in tabele izvajalnega okolja, vendar ne vključuje mostov kavljev WordPress ali registracije WP-CLI.

Iz arhiva izdaje

Vsaka izdaja GitHub vsebuje datoteko queuety.zip: vtičnik z že nameščenimi odvisnostmi Composer. Najnovejšo namestite z WP-CLI:

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

Lahko pa prenesete arhiv zip in ga naložite prek Vtičniki > Dodaj novega > Naloži vtičnik. To je najpreprostejša možnost za običajno spletno mesto WordPress.

Prek Composer za Composer, ki ga upravlja WordPress

Lupina
composer require queuety/queuety

Nato aktivirajte vtičnik:

Lupina
wp plugin activate queuety

Vrsta paketa je wordpress-plugin. Composer ga namesti v imenik vtičnikov samo, kadar projekt zahteva composer/installers in to vrsto preslika na pot namestitvenega programa, kot to počne Bedrock, projekt pa mora naložiti svoj vendor/autoload.php (to počne tudi Bedrock). Brez composer/installers ga Composer namesti v vendor/queuety/queuety, kjer ga WordPress ne najde, zato pri navadni namestitvi WordPress uporabite zip arhiv izdaje.

Iz izvorne kode med razvojem

Repozitorij postavite v wp-content/plugins/queuety, nato namestite odvisnosti PHP:

Lupina
composer install
wp plugin activate queuety

Ob aktivaciji Queuety ustvari svoje tabele zbirke podatkov (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), da lahko delavci prevzemajo opravila neposredno iz MySQL.

Vtičnik privzeto vsako minuto prek WordPress cron razporedi tudi enkratnega delavca za čakalno vrsto default. Tako dobite osnovno možnost izvajanja opravil in potekov dela brez lupine, ki ostanejo na default, če se sproža WordPress cron. Vsak zagon obdela največ eno opravilo; ne sproža ponavljajočih se urnikov, ne obnovi zastalih opravil in ne preverja rokov potekov dela. Te funkcije se izvajajo samo v dolgotrajnem procesu wp queuety work (#14). Za lastne čakalne vrste, ponavljajoče se urnike, manjšo zakasnitev ali večje obremenitve uporabite namenske procese wp queuety work.

Konfiguracija

Vse konstante so neobvezne. Določite jih v wp-config.php, preden se naloži vtičnik, ali preden se zažene Queuety pri vdelani namestitvi v slogu teme:

Konstanta Privzeto Opis
QUEUETY_RETENTION_DAYS 7 Privzeta starost v dnevih za wp queuety purge in Queuety::purge(). Samodejno se nič ne izbriše
QUEUETY_LOG_RETENTION_DAYS 0 Bere jo Config::log_retention_days(), vendar še ni uporabljena; dnevniki se hranijo, dokler ne pokličete Queuety::purge_logs() (#15)
QUEUETY_MAX_EXECUTION_TIME 300 Največje število sekund na opravilo pred časovno omejitvijo (še se ne uveljavlja, glejte Opravila)
QUEUETY_WORKER_SLEEP 1 Število sekund mirovanja, ko je čakalna vrsta prazna
QUEUETY_WORKER_MAX_JOBS 1000 Največje število opravil pred ponovnim zagonom delavca
QUEUETY_WORKER_MAX_MEMORY 128 Največje število MB pred ponovnim zagonom delavca
QUEUETY_RETRY_BACKOFF exponential Strategija čakanja pred ponovnim poskusom: exponential, linear ali fixed
QUEUETY_STALE_TIMEOUT 600 Število sekund pred obnovitvijo zataknjenih opravil
QUEUETY_CACHE_TTL 5 Privzeti TTL predpomnilnika v sekundah
QUEUETY_DEBUG false Omogoči podrobno beleženje delavca
QUEUETY_CLI_COMMAND queuety Ime korenskega ukaza WP-CLI
QUEUETY_TABLE_PREFIX queuety_ Skupno osnovno ime za vse tabele Queuety za predpono zbirke podatkov WordPress
QUEUETY_TABLE_JOBS queuety_jobs Ime tabele opravil
QUEUETY_TABLE_WORKFLOWS queuety_workflows Ime tabele potekov dela
QUEUETY_TABLE_LOGS queuety_logs Ime tabele dnevnikov
QUEUETY_TABLE_SCHEDULES queuety_schedules Ime tabele urnikov
QUEUETY_TABLE_SIGNALS queuety_signals Ime tabele signalov
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES queuety_workflow_dependencies Ime tabele čakanj na odvisnosti potekov dela
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS queuety_workflow_dispatch_keys Ime tabele idempotentnosti trajnih potekov dela
QUEUETY_TABLE_CHUNKS queuety_chunks Ime tabele pretočnih kosov
QUEUETY_TABLE_QUEUE_STATES queuety_queue_states Ime tabele stanj čakalnih vrst
QUEUETY_TABLE_WEBHOOKS queuety_webhooks Ime tabele spletnih kavljev
QUEUETY_TABLE_LOCKS queuety_locks Ime tabele zaklepanj
QUEUETY_TABLE_BATCHES queuety_batches Ime tabele paketov opravil
QUEUETY_TABLE_WORKFLOW_EVENTS queuety_workflow_events Ime tabele dnevnika dogodkov potekov dela
QUEUETY_TABLE_ARTIFACTS queuety_artifacts Ime tabele artefaktov potekov dela
QUEUETY_TABLE_STATE_MACHINES queuety_state_machines Ime tabele avtomatov stanj
QUEUETY_TABLE_STATE_MACHINE_EVENTS queuety_state_machine_events Ime tabele dnevnika dogodkov avtomatov stanj
QUEUETY_DB_DRIVER auto Gonilnik MySQL: auto, mysqli ali pdo. auto daje prednost mysqli, kadar je naložen WordPress, sicer pdo_mysql, nato mysqli

Konstanti za sprejemanje virov in prilagodljive skupine (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) sta navedeni na strani Delavci.

QUEUETY_TABLE_PREFIX spremeni samo del imen tabel Queuety. Predpona zbirke podatkov WordPress še vedno obdaja rezultat, zato $wpdb->prefix = 'wp_' in QUEUETY_TABLE_PREFIX = 'themequeue_' ustvarita tabele, kot je wp_themequeue_jobs. Izrecno določene konstante QUEUETY_TABLE_* imajo še vedno prednost pri posameznih tabelah.

Samostojne povezave lahko za vsako povezavo nastavijo tudi predpono tabele Queuety:

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

Tako ostane predpona zbirke podatkov WordPress nedotaknjena, spremeni pa se samo segment tabele Queuety.

Vaše prvo opravilo

Ustvarite razred za obravnavo, ki implementira vmesnik 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,
        ];
    }
}

Registrirajte ga in pošljite v izvajanje:

PHP
use Queuety\Queuety;

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

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

Lahko uporabite tudi sodobni razred opravila, ki ga je mogoče poslati v izvajanje:

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

Vaš prvi potek dela

Določite obravnavalnike korakov, ki implementirajo vmesnik 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 [];
    }
}

Pošljite potek dela v izvajanje:

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

Zaženite delavca

Lupina
wp queuety work

Delavec preverja, ali so na voljo čakajoča opravila, jih izvede, napreduje skozi poteke dela in miruje, ko je čakalna vrsta prazna. Za zaustavitev pritisnite Ctrl+C; proces se takoj konča, tudi sredi opravila (glejte Delavci).

Zgornji SendEmailHandler pošilja svoja opravila v čakalno vrsto emails prek config(), zato jih delavec na default ne prevzame. Navedite vsako čakalno vrsto, ki jo uporabljate:

Lupina
wp queuety work --queue=emails,default

Če ne uporabljate namenskega delavca, ima Queuety še vedno privzeti nadomestni način WordPress cron, opisan zgoraj: zažene se enkrat na minuto, omejen je na čakalno vrsto default in obdela eno opravilo na zagon. Namenski delavec omogoča večjo prepustnost in manjšo zakasnitev.

Za produkcijsko okolje zaženite več delavcev:

Lupina
wp queuety work --workers=4

Obdelujte več čakalnih vrst po prednostnem vrstnem redu:

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

Kaj sledi