Belirti
E-postalar ya da eşitlemeler hiç gerçekleşmez, failed_jobs boş kalır, supervisorctl status işçinin çalıştığını söyler. İşler oradadır, kimsenin okumadığı bir kuyrukta.
Kendiniz denetleyin
Uygulama nereye yazıyor? QUEUE_CONNECTION varsayılan bağlantıdır; paketlerin ve özelliklerin kendi *_QUEUE_CONNECTION ve *_QUEUE_NAME ayarları olabilir.
grep -E 'QUEUE' .env
ps aux | grep -E 'queue:(work|listen)'
Sonra karşılaştırın: queue:work redis --queue=messaging ile başlatılan bir işçi Redis'te yalnız messaging kuyruğunu okur. default kuyruğuna ya da database bağlantısına yazılan işler hiç alınmaz. Bekleyenleri sayın:
# database bağlantısı
SELECT queue, COUNT(*) FROM jobs GROUP BY queue;
# redis bağlantısı (Redis anahtar öneki ayarladıysanız ekleyin)
redis-cli LLEN queues:default
Nasıl oluyor
Yönettiğimiz bir sunucuda bir site işlerini database bağlantısının default kuyruğuna yazıyordu; işçisi ise yalnız messaging kuyruğunu dinliyordu. Yaklaşık 42.000 iş beş ay bekledi.
Aylardır bekleyen bir kuyruğa işçi başlatmadan önce işlerin ne olduğuna bakın. Bunlar artık önemi kalmamış eşitlemelerdi: geç çalıştırılmadılar, silindiler.
Düzeltme
İşçiyi sitenin yazdığı bağlantıda, kullandığı bütün kuyruklarla, öncelik sırasıyla başlatın:
php8.4 artisan queue:work redis --queue=messaging,default --timeout=150
- Bağlantının
retry_afterdeğerini işçinin--timeoutdeğerinden uzun tutun (buradaREDIS_QUEUE_RETRY_AFTER=180); yoksa yavaş bir iş iki kez başlatılır. .envdeğiştikten sonra işçileri yeniden başlatın:php artisan queue:restart.- Horizon kullanan sitelerde bu ayar
config/horizon.phpiçindedir.
Hostio nasıl bulur
Tarama sitenin .env dosyasından yalnız kuyruk anahtarlarını ve site için çalışan queue:work ve queue:listen işçilerini okur. Sitenin yazdığı her bağlantı ve kuyruğu okuyan bir işçi olmalıdır; yoksa queue_mismatch açılır: sitenin işçileri var ama hiçbiri orayı dinlemiyorsa tehlike, hiç işçisi yoksa bilgi bulgusu. Horizon kullanan siteler değerlendirilmez.
Pro'da sitenin Queue sekmesindeki New queue worker, queue:work komutunu seçtiğiniz bağlantı ve kuyruktan kurar. İlgili bir denetim, queue_retry_after_short, retry_after zaman aşımından uzun değilse uyarır.