Başlarken
Kurulum
Gereksinimler
- PHP 8.2 veya üzeri ve WordPress 6.4 veya üzeri
- MySQL 8.0+ veya MariaDB 10.6+. Çalışanlar, işleri ve zamanı gelen zamanlamaları
SELECT ... FOR UPDATE SKIP LOCKEDile alır; eski sunucular bunu söz dizimi hatasıyla reddeder. mysqliveyapdo_mysql(aşağıya bakın)- WP-CLI ile özel çalışanlar çalıştırıyorsanız sunucuda
wp queuety work --workersveya--min-workers/--max-workersile çalışan havuzları çalıştırıyorsanızpcntlveposixPHP uzantıları
Queuety için, WordPress ve WP-CLI dosyalarını yükleyen PHP çalışma ortamında mysqli veya pdo_mysql gerekir. Sürücüyü otomatik seçer; WordPress çalışma ortamlarında mysqli tercih eder ve tek başına/doğrudan çalışma zamanı kullanımında pdo_mysql seçeneğini kullanıma hazır tutar.
WordPress eklenti katmanı olmadan veritabanı destekli çalışma zamanını kullanmak istiyorsanız Tek Başına Kullanım sayfasına bakın. Bu yol aynı bağlantıyı ve çalışma zamanı tablolarını kullanır, ancak WordPress kanca köprülerini veya WP-CLI kaydını içermez.
Sürüm zip dosyasından
Her GitHub sürüm dosyasında bir queuety.zip paketi bulunur: Composer bağımlılıkları önceden kurulmuş eklenti. En son sürümü WP-CLI ile kurun:
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate
Alternatif olarak zip dosyasını indirip Eklentiler > Yeni Ekle > Eklenti Yükle bölümüne yükleyin. Bu, standart bir WordPress sitesi için en kolay yoldur.
Composer ile Composer yönetimli WordPress için
composer require queuety/queuety
Ardından eklentiyi etkinleştirin:
wp plugin activate queuety
Paket türü wordpress-plugin şeklindedir. Composer, projede composer/installers gerektiğinde paketi yalnızca eklentiler dizininize yerleştirir ve bu türü yükleyici yoluna eşler; Bedrock bunu yapar ve projenin kendi vendor/autoload.php öğesini yüklemesi gerekir (Bedrock de bunu yapar). composer/installers olmadan Composer paketi vendor/queuety/queuety içine kurar; burada WordPress paketi bulamaz. Bu nedenle standart bir WordPress kurulumunda sürüm zip dosyasını kullanın.
Geliştirme sırasında kaynaktan
Depoyu wp-content/plugins/queuety içine yerleştirin, ardından PHP bağımlılıklarını yükleyin:
composer install
wp plugin activate queuety
Etkinleştirildiğinde Queuety, çalışanların işleri doğrudan MySQL üzerinden alabilmesi için veritabanı tablolarını oluşturur (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).
Varsayılan olarak eklenti, default kuyruğu için her dakika WordPress cron üzerinden tek seferlik bir çalışan da zamanlar. Böylece default üzerinde kalan işler ve iş akışları için kabuk gerektirmeyen bir temel sunar; bunun için WordPress cron tetikleniyor olmalıdır. Her çalıştırma en fazla bir işi işler; yinelenen zamanlamaları çalıştırmaz, eski işleri kurtarmaz veya iş akışı son tarihlerini denetlemez. Bunlar yalnızca uzun süre çalışan bir wp queuety work sürecinde yürütülür (No. 14). Özel kuyruklar, yinelenen zamanlamalar, daha düşük gecikme veya daha yoğun iş yükleri için özel wp queuety work süreçlerine geçin.
Yapılandırma
Tüm sabitler isteğe bağlıdır. Eklenti yüklenmeden önce veya temaya gömülü kurulumda Queuety başlatılmadan önce bunları wp-config.php içinde tanımlayın:
| Sabit | Varsayılan | Açıklama |
|---|---|---|
QUEUETY_RETENTION_DAYS |
7 |
wp queuety purge ve Queuety::purge() için varsayılan gün yaşı. Otomatik temizleme yapılmaz |
QUEUETY_LOG_RETENTION_DAYS |
0 |
Config::log_retention_days() tarafından okunur ancak henüz kullanılmaz; Queuety::purge_logs() (No. 15) çağrılana kadar günlükler tutulur |
QUEUETY_MAX_EXECUTION_TIME |
300 |
Zaman aşımından önce iş başına en fazla saniye sayısı (henüz uygulanmıyor, bkz. İşler) |
QUEUETY_WORKER_SLEEP |
1 |
Kuyruk boşken beklenecek saniye sayısı |
QUEUETY_WORKER_MAX_JOBS |
1000 |
Çalışan yeniden başlatılmadan önceki en fazla iş sayısı |
QUEUETY_WORKER_MAX_MEMORY |
128 |
Çalışan yeniden başlatılmadan önceki en fazla MB miktarı |
QUEUETY_RETRY_BACKOFF |
exponential |
Geri çekilme stratejisi: exponential, linear veya fixed |
QUEUETY_STALE_TIMEOUT |
600 |
Takılı kalan işler kurtarılmadan önceki saniye sayısı |
QUEUETY_CACHE_TTL |
5 |
Varsayılan önbellek TTL değeri (saniye) |
QUEUETY_DEBUG |
false |
Ayrıntılı çalışan günlüklerini etkinleştir |
QUEUETY_CLI_COMMAND |
queuety |
Kök WP-CLI komut adı |
QUEUETY_TABLE_PREFIX |
queuety_ |
WordPress DB önekinden sonra tüm Queuety tabloları için ortak temel ad |
QUEUETY_TABLE_JOBS |
queuety_jobs |
İşler tablosunun adı |
QUEUETY_TABLE_WORKFLOWS |
queuety_workflows |
İş akışları tablosunun adı |
QUEUETY_TABLE_LOGS |
queuety_logs |
Günlükler tablosunun adı |
QUEUETY_TABLE_SCHEDULES |
queuety_schedules |
Zamanlamalar tablosunun adı |
QUEUETY_TABLE_SIGNALS |
queuety_signals |
Sinyaller tablosunun adı |
QUEUETY_TABLE_WORKFLOW_DEPENDENCIES |
queuety_workflow_dependencies |
İş akışı bağımlılık beklemeleri tablosunun adı |
QUEUETY_TABLE_WORKFLOW_DISPATCH_KEYS |
queuety_workflow_dispatch_keys |
Kalıcı iş akışı idempotensi tablosunun adı |
QUEUETY_TABLE_CHUNKS |
queuety_chunks |
Akış parçaları tablosunun adı |
QUEUETY_TABLE_QUEUE_STATES |
queuety_queue_states |
Kuyruk durumları tablosunun adı |
QUEUETY_TABLE_WEBHOOKS |
queuety_webhooks |
Webhook'lar tablosunun adı |
QUEUETY_TABLE_LOCKS |
queuety_locks |
Kilitler tablosunun adı |
QUEUETY_TABLE_BATCHES |
queuety_batches |
Toplu işler tablosunun adı |
QUEUETY_TABLE_WORKFLOW_EVENTS |
queuety_workflow_events |
İş akışı olay günlüğü tablosunun adı |
QUEUETY_TABLE_ARTIFACTS |
queuety_artifacts |
İş akışı yapıtları tablosunun adı |
QUEUETY_TABLE_STATE_MACHINES |
queuety_state_machines |
Durum makineleri tablosunun adı |
QUEUETY_TABLE_STATE_MACHINE_EVENTS |
queuety_state_machine_events |
Durum makinesi olay günlüğü tablosunun adı |
QUEUETY_DB_DRIVER |
auto |
MySQL sürücüsü: auto, mysqli veya pdo. auto, WordPress yüklüyse mysqli, aksi hâlde pdo_mysql, ardından mysqli seçeneğini tercih eder |
Kaynak kabulü ve uyarlanabilir havuz sabitleri (QUEUETY_RESOURCE_*, QUEUETY_WORKER_POOL_*) Çalışanlar sayfasında listelenmiştir.
QUEUETY_TABLE_PREFIX yalnızca tablo adlarının Queuety bölümünü değiştirir. WordPress veritabanı öneki sonucu sarmalamaya devam eder; bu nedenle $wpdb->prefix = 'wp_' ve QUEUETY_TABLE_PREFIX = 'themequeue_' gibi tablolar oluşur: wp_themequeue_jobs. Tek tek tablolar için açıkça tanımlanan QUEUETY_TABLE_* sabitleri yine önceliklidir.
Bağımsız bağlantılar da bağlantı başına Queuety tablo önekini ayarlayabilir:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
Böylece WordPress veritabanı öneki korunur ve yalnızca Queuety tablo bölümü değişir.
İlk işiniz
Handler arayüzünü uygulayan bir işleyici sınıfı oluşturun:
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,
];
}
}
Kaydedip dağıtın:
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );
Ya da modern dağıtılabilir iş sınıfını kullanın:
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!' );
İlk iş akışınız
Step arayüzünü uygulayan adım işleyicilerini tanımlayın:
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 [];
}
}
İş akışını dağıtın:
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
Çalışan başlatın
wp queuety work
Çalışan bekleyen işleri yoklar, yürütür, iş akışlarını ilerletir ve kuyruk boşken bekler. Durdurmak için Ctrl+C tuşuna basın; bu, işin ortasında bile süreci hemen sonlandırır (bkz. Çalışanlar).
Yukarıdaki SendEmailHandler, işlerini config() üzerinden emails kuyruğuna gönderir; bu nedenle default üzerinde çalışan bir çalışan bu işleri almaz. Kullandığınız her kuyruğun adını belirtin:
wp queuety work --queue=emails,default
Özel bir çalışan çalıştırmıyorsanız Queuety, yukarıda açıklanan varsayılan dakikada bir çalışan WordPress cron yedeğini sunmaya devam eder; bu seçenek yalnızca default kuyruğuyla ve çalıştırma başına tek işle sınırlıdır. Özel çalışan, daha yüksek verim ve daha düşük gecikme sunar.
Üretim ortamında birden fazla çalışan çalıştırın:
wp queuety work --workers=4
Öncelik sırasına göre birden fazla kuyruğu işleyin:
wp queuety work --queue=high,default,low
Sırada ne var
- Tam dağıtım ve işleyici kılavuzu için İşler
- Zincirler, paralel adımlar, koşullu dallanma ve run-workflows için İş Akışları
- Hız sınırlama, kısıtlama ve özel işlem hattı mantığı için Ara Katman Yazılımları
- Geri çağrılarla iş grupları dağıtmak için Toplu İşleme
- Akış verilerini parça parça kalıcı olarak saklamak için Akış Adımları
- Yinelenen işler için Zamanlama
- Takılabilir önbellek katmanı için Önbelleğe Alma
- QueueFake ve test doğrulamaları için Test Etme
- Kullanılabilir tüm komutlar için CLI Referansı
- Programatik erişim için PHP API