İçeriğe geç

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 LOCKED ile alır; eski sunucular bunu söz dizimi hatasıyla reddeder.
  • mysqli veya pdo_mysql (aşağıya bakın)
  • WP-CLI ile özel çalışanlar çalıştırıyorsanız sunucuda wp queuety work
  • --workers veya --min-workers/--max-workers ile çalışan havuzları çalıştırıyorsanız pcntl ve posix PHP 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:

Kabuk
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

Kabuk
composer require queuety/queuety

Ardından eklentiyi etkinleştirin:

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

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

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

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

Kaydedip dağıtın:

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

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

İlk iş akışınız

Step arayüzünü uygulayan adım işleyicilerini tanımlayın:

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

İş akışını dağıtın:

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

Çalışan başlatın

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

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

Kabuk
wp queuety work --workers=4

Öncelik sırasına göre birden fazla kuyruğu işleyin:

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

Sırada ne var