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. mysqlialipdo_mysql(glejte spodaj)- WP-CLI na strežniku, če uporabljate namenske delavce z
wp queuety work - Razširitvi
pcntlinposixPHP, če uporabljate sklade delavcev z--workersali--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:
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
composer require queuety/queuety
Nato aktivirajte vtičnik:
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:
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:
$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:
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:
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:
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:
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:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Zaženite delavca
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:
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:
wp queuety work --workers=4
Obdelujte več čakalnih vrst po prednostnem vrstnem redu:
wp queuety work --queue=high,default,low
Kaj sledi
- Opravila za celoten vodnik po pošiljanju v izvajanje in obravnavalnikih
- Poteki dela za verige, vzporedne korake, pogojno razvejanje in izvajanje potekov dela
- Vmesna programska oprema za omejevanje hitrosti, dušenje in logiko po meri v cevovodu
- Paketna obdelava za pošiljanje skupin opravil v izvajanje s povratnimi klici
- Pretočni koraki za shranjevanje pretočnih podatkov po posameznih kosih
- Načrtovanje za ponavljajoča se opravila
- Predpomnjenje za razširljivo plast predpomnilnika
- Testiranje za QueueFake in preverjanja v testih
- CLI Referenca za vse razpoložljive ukaze
- PHP API za programski dostop