Kom igång
Installation
Krav
- PHP 8.2 eller senare och WordPress 6.4 eller senare
- MySQL 8.0+ eller MariaDB 10.6+. Arbetare hämtar jobb och schemalagda uppgifter med
SELECT ... FOR UPDATE SKIP LOCKED, vilket äldre servrar avvisar med ett syntaxfel. mysqliellerpdo_mysql(se nedan)- WP-CLI på servern om du kör dedikerade arbetare med
wp queuety work - Tilläggen
pcntlochposixPHP om du kör arbetarpooler med--workerseller--min-workers/--max-workers
Queuety kräver antingen mysqli eller pdo_mysql i körmiljön PHP som laddar WordPress och WP-CLI. Drivrutinen väljs automatiskt: mysqli föredras i körmiljöer för WordPress, medan pdo_mysql finns tillgängligt för fristående direkt användning av körmiljön.
Om du vill använda den databasbaserade körmiljön utan pluginlagret WordPress, se Fristående användning. Den använder samma anslutning och körtidstabeller, men innehåller inte hookbryggorna WordPress eller registreringen WP-CLI.
Från versionsarkivet
Varje GitHub-version har en queuety.zip-fil: pluginet med sina Composer-beroenden redan installerade. Installera den senaste med WP-CLI:
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate
Du kan också hämta zip-filen och ladda upp den under Tillägg > Lägg till nytt > Ladda upp tillägg. Detta är den enklaste metoden för en vanlig WordPress-webbplats.
Via Composer för Composer-hanterade WordPress
composer require queuety/queuety
Aktivera sedan pluginet:
wp plugin activate queuety
Pakettypen är wordpress-plugin. Composer placerar det endast i tilläggskatalogen när projektet kräver composer/installers och mappar den typen till en installationssökväg, som Bedrock gör, och projektet måste läsa in sin egen vendor/autoload.php (det gör även Bedrock). Utan composer/installers installerar Composer det i vendor/queuety/queuety, där WordPress inte hittar det, så använd versionsarkivet på en vanlig WordPress-installation.
Från källkod under utveckling
Placera kodarkivet i wp-content/plugins/queuety och installera sedan beroendena för PHP:
composer install
wp plugin activate queuety
Vid aktivering skapar Queuety sina databastabeller (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å att arbetare kan hämta jobb direkt från MySQL.
Som standard schemalägger tillägget också en engångsarbetare via WordPress cron varje minut för kön default. Det ger en grundlösning för jobb och arbetsflöden som inte kräver ett skal och som körs på default, så länge WordPress cron körs. Varje körning behandlar högst ett jobb och utlöser inte återkommande scheman, återställer inte inaktuella jobb och kontrollerar inte tidsgränser för arbetsflöden. De funktionerna körs bara i en långvarig wp queuety work-process (#14). För anpassade köer, återkommande scheman, lägre fördröjning eller större arbetsbelastningar bör du använda dedikerade wp queuety work-processer.
Konfiguration
Alla konstanter är valfria. Definiera dem i wp-config.php innan tillägget läses in, eller innan Queuety startar i en inbäddad installation av temastil:
| Konstant | Standard | Beskrivning |
|---|---|---|
QUEUETY_RETENTION_DAYS |
7 |
Standardålder i dagar för wp queuety purge och Queuety::purge(). Ingenting rensas automatiskt |
QUEUETY_LOG_RETENTION_DAYS |
0 |
Läses av Config::log_retention_days() men används ännu inte; loggar sparas tills du anropar Queuety::purge_logs() (#15) |
QUEUETY_MAX_EXECUTION_TIME |
300 |
Högsta antal sekunder per jobb före timeout (tillämpas ännu inte, se Jobb) |
QUEUETY_WORKER_SLEEP |
1 |
Sekunder att vänta när kön är tom |
QUEUETY_WORKER_MAX_JOBS |
1000 |
Högsta antal jobb innan arbetaren startas om |
QUEUETY_WORKER_MAX_MEMORY |
128 |
Högsta antal MB innan arbetaren startas om |
QUEUETY_RETRY_BACKOFF |
exponential |
Backoff-strategi: exponential, linear eller fixed |
QUEUETY_STALE_TIMEOUT |
600 |
Sekunder innan jobb som fastnat återställs |
QUEUETY_CACHE_TTL |
5 |
Standardvärde för cache-TTL i sekunder |
QUEUETY_DEBUG |
false |
Aktivera utförlig loggning för arbetaren |
QUEUETY_CLI_COMMAND |
queuety |
Namn på rotkommandot WP-CLI |
QUEUETY_TABLE_PREFIX |
queuety_ |
Gemensamt basnamn för alla Queuety-tabeller efter DB-prefixet WordPress |
QUEUETY_TABLE_JOBS |
queuety_jobs |
Namn på jobbtabellen |
QUEUETY_TABLE_WORKFLOWS |
queuety_workflows |
Namn på arbetsflödestabellen |
QUEUETY_TABLE_LOGS |
queuety_logs |
Namn på loggtabellen |
QUEUETY_TABLE_SCHEDULES |
queuety_schedules |
Namn på schematabellen |
QUEUETY_TABLE_SIGNALS |
queuety_signals |
Namn på signaltabellen |
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES |
queuety_workflow_dependencies |
Namn på tabellen för väntande beroenden i arbetsflöden |
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS |
queuety_workflow_dispatch_keys |
Namn på tabellen för idempotens i beständiga arbetsflöden |
QUEUETY_TABLE_CHUNKS |
queuety_chunks |
Namn på tabellen för strömningssegment |
QUEUETY_TABLE_QUEUE_STATES |
queuety_queue_states |
Namn på tabellen för köstatus |
QUEUETY_TABLE_WEBHOOKS |
queuety_webhooks |
Namn på webhook-tabellen |
QUEUETY_TABLE_LOCKS |
queuety_locks |
Namn på låstabellen |
QUEUETY_TABLE_BATCHES |
queuety_batches |
Namn på batchtabellen |
QUEUETY_TABLE_WORKFLOW_EVENTS |
queuety_workflow_events |
Namn på arbetsflödets händelseloggstabell |
QUEUETY_TABLE_ARTIFACTS |
queuety_artifacts |
Namn på arbetsflödets artefakttabell |
QUEUETY_TABLE_STATE_MACHINES |
queuety_state_machines |
Namn på tillståndsmaskintabellen |
QUEUETY_TABLE_STATE_MACHINE_EVENTS |
queuety_state_machine_events |
Namn på tillståndsmaskinens händelseloggstabell |
QUEUETY_DB_DRIVER |
auto |
MySQL-drivrutin: auto, mysqli eller pdo. auto föredrar mysqli när WordPress är laddat, annars pdo_mysql och därefter mysqli |
Konstanter för resursantagning och adaptiv pool (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) finns på sidan Arbetare.
QUEUETY_TABLE_PREFIX ändrar endast delen Queuety av tabellnamnen. Databasprefixet WordPress läggs fortfarande runt resultatet, så $wpdb->prefix = 'wp_' och QUEUETY_TABLE_PREFIX = 'themequeue_' skapar tabeller som wp_themequeue_jobs. Uttryckliga QUEUETY_TABLE_*-konstanter har fortfarande företräde för enskilda tabeller.
Fristående anslutningar kan också ange tabellprefixet Queuety per anslutning:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
Det bevarar databasprefixet WordPress och ändrar endast tabellsegmentet Queuety.
Ditt första jobb
Skapa en hanterarklass som implementerar gränssnittet 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,
];
}
}
Registrera den och skicka iväg ett jobb:
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );
Eller använd den moderna jobbklassen som kan skickas iväg:
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!' );
Ditt första arbetsflöde
Definiera steghanterare som implementerar gränssnittet 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 [];
}
}
Skicka iväg arbetsflödet:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Starta en arbetare
wp queuety work
Arbetaren söker efter väntande jobb, kör dem, för arbetsflöden vidare och väntar när kön är tom. Tryck på Ctrl+C för att stoppa; processen avslutas omedelbart, även mitt under ett jobb (se Arbetare).
SendEmailHandler ovan skickar sina jobb till kön emails via config(), så en arbetare på default hämtar dem inte. Ange namnet på varje kö du använder:
wp queuety work --queue=emails,default
Om du inte kör en dedikerad arbetare har Queuety fortfarande den tidigare beskrivna reservlösningen med WordPress cron en gång i minuten, begränsad till kön default och ett jobb per körning. Den dedikerade arbetaren ger högre genomströmning och lägre fördröjning.
Kör flera arbetare i produktion:
wp queuety work --workers=4
Bearbeta flera köer i prioritetsordning:
wp queuety work --queue=high,default,low
Nästa steg
- Jobb innehåller den fullständiga guiden till att skicka jobb och skriva hanterare
- Arbetsflöden beskriver kedjor, parallella steg, villkorsstyrd förgrening och körning av arbetsflöden
- Mellanprogram beskriver hastighetsbegränsning, strypning och anpassad pipeline-logik
- Batchbearbetning beskriver hur grupper av jobb skickas iväg med återanrop
- Strömningssteg beskriver hur strömmade data sparas bit för bit
- Schemaläggning beskriver återkommande jobb
- Cachelagring beskriver det utbytbara cachelagret
- Testning beskriver QueueFake och testpåståenden
- CLI Referens innehåller alla tillgängliga kommandon
- PHP API för programmatisk åtkomst