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. mysqlivaipdo_mysql(skatiet tālāk)- Serverī jābūt WP-CLI, ja darbinieki darbojas atsevišķi ar
wp queuety work pcntlunposixPHP paplašinājumi, ja darbinieku kopas darbojas ar--workersvai--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:
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
composer require queuety/queuety
Pēc tam aktivizējiet spraudni:
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:
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:
$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:
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:
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:
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:
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:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Palaidiet darba procesu
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:
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:
wp queuety work --workers=4
Apstrādājiet vairākas rindas, ievērojot prioritāšu secību:
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