Kom godt i gang
Installation
Krav
- PHP 8.2 eller nyere og WordPress 6.4 eller nyere
- MySQL 8.0+ eller MariaDB 10.6+. Arbejdere henter jobs og forfaldne planer med
SELECT ... FOR UPDATE SKIP LOCKED, som ældre servere afviser med en syntaksfejl. mysqliellerpdo_mysql(se nedenfor)- WP-CLI på serveren, hvis du kører dedikerede arbejdere med
wp queuety work - Udvidelserne
pcntlogposixPHP, hvis du kører arbejderpuljer med--workerseller--min-workers/--max-workers
Queuety kræver enten mysqli eller pdo_mysql i det PHP-runtime, der indlæser WordPress og WP-CLI. Driveren vælges automatisk; mysqli foretrækkes i runtimes med WordPress, mens pdo_mysql fortsat er tilgængelig ved selvstændig/direkte brug af runtime.
Hvis du ønsker et databasebaseret runtime uden pluginlaget WordPress, kan du se Selvstændig brug. Denne løsning bruger de samme forbindelses- og runtimetabeller, men omfatter ikke hookbroerne WordPress eller registreringen WP-CLI.
Fra udgivelses-zipfilen
Hver GitHub-udgivelse har et queuety.zip-aktiv: pluginnet med dets Composer-afhængigheder allerede installeret. Installér den nyeste med WP-CLI:
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate
Du kan også downloade zipfilen og uploade den under Plugins > Tilføj nyt > Upload plugin. Dette er den enkleste løsning til et almindeligt WordPress-websted.
Via Composer til Composer-administreret WordPress
composer require queuety/queuety
Aktivér derefter pluginnet:
wp plugin activate queuety
Pakkens type er wordpress-plugin. Composer placerer den kun i pluginmappen, hvis projektet kræver composer/installers og knytter denne type til en installationssti, som Bedrock gør, og projektet skal indlæse sit eget vendor/autoload.php (det gør Bedrock også). Uden composer/installers installerer Composer den i vendor/queuety/queuety, hvor WordPress ikke kan finde den. Brug derfor udgivelses-zipfilen ved en almindelig WordPress-installation.
Fra kilden under udvikling
Placér repositoryet i wp-content/plugins/queuety, og installér derefter PHP-afhængigheder:
composer install
wp plugin activate queuety
Ved aktivering opretter Queuety sine databasetabeller (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), så arbejdere kan hente jobs direkte fra MySQL.
Som standard planlægger pluginnet også en engangsarbejder via WordPress cron hvert minut til køen default. Det giver dig en løsning uden shell til jobs og workflows, der kører på default, så længe WordPress cron kører. Hver kørsel behandler højst ét job og udløser ikke gentagne planer, gendanner ikke forældede jobs og kontrollerer ikke workflowfrister; disse funktioner kører kun i en langkørende wp queuety work-proces (#14). Ved brugerdefinerede køer, gentagne planer, lavere latenstid eller større arbejdsbelastninger skal du skifte til dedikerede wp queuety work-processer.
Konfiguration
Alle konstanter er valgfrie. Definér dem i wp-config.php, før pluginnet indlæses, eller før Queuety starter i en indlejret installation i temastil:
| Konstant | Standard | Beskrivelse |
|---|---|---|
QUEUETY_RETENTION_DAYS |
7 |
Standardalder i dage for wp queuety purge og Queuety::purge(). Intet ryddes automatisk |
QUEUETY_LOG_RETENTION_DAYS |
0 |
Læses af Config::log_retention_days(), men bruges ikke endnu; logfiler gemmes, indtil du kalder Queuety::purge_logs() (#15) |
QUEUETY_MAX_EXECUTION_TIME |
300 |
Maks. sekunder pr. job før timeout (håndhæves ikke endnu, se Jobs) |
QUEUETY_WORKER_SLEEP |
1 |
Sekunder, der ventes, når køen er tom |
QUEUETY_WORKER_MAX_JOBS |
1000 |
Maks. antal jobs, før arbejderen genstarter |
QUEUETY_WORKER_MAX_MEMORY |
128 |
Maks. MB, før arbejderen genstarter |
QUEUETY_RETRY_BACKOFF |
exponential |
Ventetidsstrategi: exponential, linear eller fixed |
QUEUETY_STALE_TIMEOUT |
600 |
Sekunder, før fastlåste jobs gendannes |
QUEUETY_CACHE_TTL |
5 |
Standard cache-TTL i sekunder |
QUEUETY_DEBUG |
false |
Aktivér detaljeret logning for arbejdere |
QUEUETY_CLI_COMMAND |
queuety |
Rodkommandoens WP-CLI-navn |
QUEUETY_TABLE_PREFIX |
queuety_ |
Fælles basisnavn for alle Queuety-tabeller efter WordPress-DB-præfikset |
QUEUETY_TABLE_JOBS |
queuety_jobs |
Jobs-tabellens navn |
QUEUETY_TABLE_WORKFLOWS |
queuety_workflows |
Workflows-tabellens navn |
QUEUETY_TABLE_LOGS |
queuety_logs |
Logtabellens navn |
QUEUETY_TABLE_SCHEDULES |
queuety_schedules |
Plantabellens navn |
QUEUETY_TABLE_SIGNALS |
queuety_signals |
Signaltabellens navn |
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES |
queuety_workflow_dependencies |
Tabellens navn for afhængighedsventetider i workflows |
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS |
queuety_workflow_dispatch_keys |
Tabellens navn for idempotens i holdbare workflows |
QUEUETY_TABLE_CHUNKS |
queuety_chunks |
Tabellens navn for streamingstykker |
QUEUETY_TABLE_QUEUE_STATES |
queuety_queue_states |
Tabellens navn for køtilstande |
QUEUETY_TABLE_WEBHOOKS |
queuety_webhooks |
Webhooks-tabellens navn |
QUEUETY_TABLE_LOCKS |
queuety_locks |
Låsetabellens navn |
QUEUETY_TABLE_BATCHES |
queuety_batches |
Batchtabellens navn |
QUEUETY_TABLE_WORKFLOW_EVENTS |
queuety_workflow_events |
Tabellens navn for workflowhændelseslog |
QUEUETY_TABLE_ARTIFACTS |
queuety_artifacts |
Tabellens navn for workflowartefakter |
QUEUETY_TABLE_STATE_MACHINES |
queuety_state_machines |
Tabellens navn for tilstandsmaskiner |
QUEUETY_TABLE_STATE_MACHINE_EVENTS |
queuety_state_machine_events |
Tabellens navn for tilstandsmaskinens hændelseslog |
QUEUETY_DB_DRIVER |
auto |
MySQL-driver: auto, mysqli eller pdo. auto foretrækker mysqli, når WordPress er indlæst, ellers pdo_mysql og derefter mysqli |
Konstanter for ressourceallokering og adaptive puljer (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) er angivet på siden Arbejdere.
QUEUETY_TABLE_PREFIX ændrer kun Queuety-delen af tabelnavnene. WordPress-databasepræfikset omslutter stadig resultatet, så $wpdb->prefix = 'wp_' og QUEUETY_TABLE_PREFIX = 'themequeue_' opretter tabeller som wp_themequeue_jobs. Eksplicitte konstanter QUEUETY_TABLE_* har stadig forrang for individuelle tabeller.
Selvstændige forbindelser kan også angive tabelpræfikset Queuety pr. forbindelse:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
Det bevarer WordPress-databasepræfikset og ændrer kun tabellens Queuety-segment.
Dit første job
Opret en handlerklasse, der implementerer grænsefladen 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,
];
}
}
Registrér den, og afsend jobbet:
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );
Eller brug den moderne afsendelige jobklasse:
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!' );
Dit første workflow
Definér trinhåndteringer, der implementerer grænsefladen 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 [];
}
}
Afsend workflowet:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Start en arbejder
wp queuety work
Arbejderen søger efter ventende jobs, udfører dem, fører workflows videre og venter, når køen er tom. Tryk på Ctrl+C for at stoppe; processen afsluttes straks, selv midt i et job (se Arbejdere).
SendEmailHandler ovenfor sender sine jobs til køen emails via config(), så en arbejder på default ikke henter dem. Angiv navnet på hver kø, du bruger:
wp queuety work --queue=emails,default
Hvis du ikke kører en dedikeret arbejder, har Queuety stadig den ovenfor beskrevne WordPress cron-fallback, der kører én gang i minuttet. Den er begrænset til køen default og ét job pr. kørsel. Den dedikerede arbejder giver større gennemløb og lavere latenstid.
I produktion skal du køre flere arbejdere:
wp queuety work --workers=4
Behandl flere køer med prioritering:
wp queuety work --queue=high,default,low
Hvad nu?
- Jobs for den komplette vejledning til afsendelse og handlere
- Workflows for kæder, parallelle trin, betinget forgrening og afvikling af workflows
- Middleware for hastighedsbegrænsning, begrænsning af gennemløb og tilpasset pipelinelogik
- Batchbehandling for afsendelse af grupper af jobs med callbacks
- Streamingtrin for lagring af streamede data stykke for stykke
- Planlægning for gentagne jobs
- Caching for det modulære cachelag
- Test for QueueFake og testkontroller
- CLI-reference for alle tilgængelige kommandoer
- PHP API for programmatisk adgang