Pāriet uz saturu

Darba sākšana

Instalēšana

Prasības

  • PHP 8.2 vai jaunāka versija un WordPress 6.4 vai jaunāka versija
  • MySQL 8.0+ vai MariaDB 10.6+. Darbinieki pārņem darbus un izpildāmos grafikus, izmantojot SELECT ... FOR UPDATE SKIP LOCKED, ko vecāki serveri noraida ar sintakses kļūdu.
  • mysqli vai pdo_mysql (skatiet tālāk)
  • Serverī jābūt WP-CLI, ja darbinieki darbojas atsevišķi ar wp queuety work
  • pcntl un posix PHP paplašinājumi, ja darbinieku kopas darbojas ar --workers vai --min-workers/--max-workers

Queuety nepieciešams vai nu mysqli, vai pdo_mysql izpildvidē, kas ielādē WordPress un WP-CLI PHP. Draiveri tas izvēlas automātiski, dodot priekšroku mysqli WordPress izpildvidēs un saglabājot pdo_mysql atsevišķai vai tiešai izpildvides lietošanai.

Ja nepieciešama DB atbalstīta izpildvide bez WordPress spraudņa slāņa, skatiet sadaļu Atsevišķa izmantošana. Šajā gadījumā tiek izmantots tas pats savienojums un izpildvides tabulas, taču nav iekļauti WordPress āķu tilti vai WP-CLI reģistrācija.

No laidiena ZIP arhīva

Katram GitHub laidienam ir queuety.zip fails: spraudnis, kuram Composer atkarības jau ir instalētas. Instalējiet jaunāko laidienu ar WP-CLI:

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

Varat arī lejupielādēt ZIP arhīvu un augšupielādēt to sadaļā Plugins > Add New > Upload Plugin. Šis ir vienkāršākais risinājums parastai WordPress vietnei.

Ar Composer, izmantojot Composer pārvaldītu WordPress

Apvalks
composer require queuety/queuety

Pēc tam aktivizējiet spraudni:

Apvalks
wp plugin activate queuety

Pakotnes tips ir wordpress-plugin. Composer ievieto to spraudņu mapē tikai tad, ja projektā nepieciešams composer/installers un šis tips ir piesaistīts instalācijas ceļam, kā to dara Bedrock; projektam jāielādē arī savs vendor/autoload.php (to dara arī Bedrock). Bez composer/installers Composer to instalē mapē vendor/queuety/queuety, kur to neatrod WordPress, tāpēc parastā WordPress instalācijā izmantojiet laidiena ZIP arhīvu.

No avota koda izstrādes laikā

Ievietojiet repozitoriju mapē wp-content/plugins/queuety un pēc tam instalējiet PHP atkarības:

Apvalks
composer install
wp plugin activate queuety

Aktivizēšanas laikā Queuety izveido savas datubāzes tabulas (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), lai darbinieki varētu pārņemt darbus tieši no MySQL.

Pēc noklusējuma spraudnis ik minūti ieplāno vienreizēju darbinieka palaišanu, izmantojot WordPress cron, rindai default. Tas nodrošina pamata darbu un darbplūsmu izpildi bez čaulas, ja tās darbojas default un tiek izsaukts WordPress cron. Katrā palaišanas reizē tiek apstrādāts ne vairāk kā viens darbs, un netiek palaisti periodiskie grafiki, atkoptie novecojušie darbi vai pārbaudīti darbplūsmu termiņi; tas viss notiek tikai ilgstoši darbojošā wp queuety work procesā (#14). Pielāgotām rindām, periodiskiem grafikiem, mazākai aizkavei vai lielākai darba slodzei pārejiet uz atsevišķiem wp queuety work procesiem.

Konfigurācija

Visas konstantes nav obligātas. Definējiet tās failā wp-config.php pirms spraudņa ielādes vai pirms Queuety palaišanas iegultā, tēmas tipa instalācijā:

Konstante Noklusējums Apraksts
QUEUETY_RETENTION_DAYS 7 Noklusējuma vecums dienās priekš wp queuety purge un Queuety::purge(). Nekas netiek dzēsts automātiski
QUEUETY_LOG_RETENTION_DAYS 0 Nolasa Config::log_retention_days(), bet vēl neizmanto; žurnāli tiek saglabāti, līdz izsaucat Queuety::purge_logs() (#15)
QUEUETY_MAX_EXECUTION_TIME 300 Maksimālais sekunžu skaits vienam uzdevumam pirms taimauta (vēl netiek piemērots; skatiet Uzdevumi)
QUEUETY_WORKER_SLEEP 1 Sekunžu skaits, ko gaidīt, kad rinda ir tukša
QUEUETY_WORKER_MAX_JOBS 1000 Maksimālais uzdevumu skaits pirms darba process tiek restartēts
QUEUETY_WORKER_MAX_MEMORY 128 Maksimālais MB skaits pirms darba process tiek restartēts
QUEUETY_RETRY_BACKOFF exponential Atkāpšanās stratēģija: exponential, linear vai fixed
QUEUETY_STALE_TIMEOUT 600 Sekunžu skaits, pēc kura tiek atgūti iestrēguši uzdevumi
QUEUETY_CACHE_TTL 5 Noklusējuma kešatmiņas TTL sekundēs
QUEUETY_DEBUG false Iespējot detalizētu darba procesa žurnalēšanu
QUEUETY_CLI_COMMAND queuety Saknes WP-CLI komandas nosaukums
QUEUETY_TABLE_PREFIX queuety_ Kopīgs bāzes nosaukums visām Queuety tabulām aiz WordPress DB prefiksa
QUEUETY_TABLE_JOBS queuety_jobs Uzdevumu tabulas nosaukums
QUEUETY_TABLE_WORKFLOWS queuety_workflows Darbplūsmu tabulas nosaukums
QUEUETY_TABLE_LOGS queuety_logs Žurnālu tabulas nosaukums
QUEUETY_TABLE_SCHEDULES queuety_schedules Grafiku tabulas nosaukums
QUEUETY_TABLE_SIGNALS queuety_signals Signālu tabulas nosaukums
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES queuety_workflow_dependencies Darbplūsmu atkarību gaidīšanas tabulas nosaukums
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS queuety_workflow_dispatch_keys Noturīgas darbplūsmas idempotences tabulas nosaukums
QUEUETY_TABLE_CHUNKS queuety_chunks Straumēšanas fragmentu tabulas nosaukums
QUEUETY_TABLE_QUEUE_STATES queuety_queue_states Rindu stāvokļu tabulas nosaukums
QUEUETY_TABLE_WEBHOOKS queuety_webhooks Tīmekļa āķu tabulas nosaukums
QUEUETY_TABLE_LOCKS queuety_locks Slēdzeņu tabulas nosaukums
QUEUETY_TABLE_BATCHES queuety_batches Partiju tabulas nosaukums
QUEUETY_TABLE_WORKFLOW_EVENTS queuety_workflow_events Darbplūsmas notikumu žurnāla tabulas nosaukums
QUEUETY_TABLE_ARTIFACTS queuety_artifacts Darbplūsmas artefaktu tabulas nosaukums
QUEUETY_TABLE_STATE_MACHINES queuety_state_machines Stāvokļu mašīnu tabulas nosaukums
QUEUETY_TABLE_STATE_MACHINE_EVENTS queuety_state_machine_events Stāvokļu mašīnu notikumu žurnāla tabulas nosaukums
QUEUETY_DB_DRIVER auto MySQL draiveris: auto, mysqli vai pdo. auto dod priekšroku mysqli, ja ir ielādēts WordPress, citādi pdo_mysql un pēc tam mysqli

Resursu piešķiršanas un adaptīvā pūla konstantes (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) ir norādītas lapā Workers.

QUEUETY_TABLE_PREFIX maina tikai tabulu nosaukumu daļu Queuety. WordPress datubāzes prefikss joprojām tiek pievienots rezultātam, tāpēc $wpdb->prefix = 'wp_' un QUEUETY_TABLE_PREFIX = 'themequeue_' veido tādas tabulas kā wp_themequeue_jobs. Atsevišķām tabulām joprojām ir prioritāte skaidri norādītajām konstantēm QUEUETY_TABLE_*.

Atsevišķiem savienojumiem var iestatīt arī tabulu prefiksu Queuety katram savienojumam:

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

Tādējādi tiek saglabāts WordPress datubāzes prefikss un mainīts tikai Queuety tabulas segments.

Jūsu pirmais uzdevums

Izveidojiet apdarinātāja klasi, kas implementē saskarni 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,
        ];
    }
}

Reģistrējiet to un nosūtiet:

PHP
use Queuety\Queuety;

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

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

Vai izmantojiet mūsdienīgu nosūtāma uzdevuma klasi:

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

Jūsu pirmā darbplūsma

Definējiet soļu apdarinātājus, kas implementē saskarni 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 [];
    }
}

Nosūtiet darbplūsmu:

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

Palaidiet darba procesu

Apvalks
wp queuety work

Darba process pārbauda, vai ir neapstrādāti uzdevumi, izpilda tos, virza darbplūsmas uz priekšu un gaida, kad rinda ir tukša. Nospiediet Ctrl+C, lai apturētu; process beigsies nekavējoties, pat ja uzdevums vēl tiek izpildīts (skatiet Workers).

Iepriekš minētais SendEmailHandler nosūta savus uzdevumus uz rindu emails, izmantojot config(), tāpēc darba process, kas darbojas ar default, tos nepaņems. Norādiet visu izmantoto rindu nosaukumus:

Apvalks
wp queuety work --queue=emails,default

Ja nepalaižat īpašu darba procesu, Queuety joprojām izmanto iepriekš aprakstīto noklusējuma WordPress reizi minūtē cron rezerves mehānismu, kas darbojas tikai ar rindu default un apstrādā vienu uzdevumu katrā palaišanas reizē. Īpašs darba process nodrošina lielāku caurlaidspēju un mazāku latentumu.

Produkcijas vidē palaidiet vairākus darba procesus:

Apvalks
wp queuety work --workers=4

Apstrādājiet vairākas rindas, ievērojot prioritāšu secību:

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

Kas tālāk

  • Uzdevumi, lai iegūtu pilnu nosūtīšanas un apdarinātāju ceļvedi
  • Darbplūsmas, lai uzzinātu par ķēdēm, paralēliem soļiem, nosacījumu sazarojumiem un darbplūsmu palaišanu
  • Starpprogrammatūra, lai uzzinātu par ātruma ierobežošanu, slāpēšanu un pielāgotu konveijera loģiku
  • Partiju apstrāde, lai uzzinātu, kā nosūtīt uzdevumu grupas ar atzvanīšanas funkcijām
  • Straumēšanas soļi, lai uzzinātu, kā saglabāt straumētus datus pa fragmentiem
  • Plānošana, lai uzzinātu par atkārtotiem uzdevumiem
  • Kešošana, lai uzzinātu par pievienojamo kešatmiņas slāni
  • Testēšana, lai uzzinātu par QueueFake un testu pārbaudēm
  • CLI Atsauce, lai uzzinātu par visām pieejamajām komandām
  • PHP API, lai uzzinātu par piekļuvi programmatiski