Hoppa till innehåll

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.
  • mysqli eller pdo_mysql (se nedan)
  • WP-CLI på servern om du kör dedikerade arbetare med wp queuety work
  • Tilläggen pcntl och posix PHP om du kör arbetarpooler med --workers eller --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:

Shell
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

Shell
composer require queuety/queuety

Aktivera sedan pluginet:

Shell
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:

Shell
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å jobbtabel­len
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:

PHP
$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:

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

Registrera den och skicka iväg ett jobb:

PHP
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:

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

Ditt första arbetsflöde

Definiera steghanterare som implementerar gränssnittet 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 [];
    }
}

Skicka iväg arbetsflödet:

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

Starta en arbetare

Shell
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:

Shell
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:

Shell
wp queuety work --workers=4

Bearbeta flera köer i prioritetsordning:

Shell
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