İçeriğe geç
Hostio

Rehber · queue_mismatch

Laravel kuyruk işleri işlenmiyor: işçi yanlış kuyruğu dinliyor

Bir işçi yalnız başlatıldığı bağlantıyı ve kuyrukları işler. Uygulama başka bir yere yazıyorsa o işler sonsuza kadar bekler ve hiçbir şey hata bildirmez.

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_after değerini işçinin --timeout değerinden uzun tutun (burada REDIS_QUEUE_RETRY_AFTER=180); yoksa yavaş bir iş iki kez başlatılır.
  • .env değiştikten sonra işçileri yeniden başlatın: php artisan queue:restart.
  • Horizon kullanan sitelerde bu ayar config/horizon.php iç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.

39 denetimin tamamı · Bütün rehberler

Ücretsiz sağlık taramasıyla başlayın.

Talivio'dan: TCSR A11yProof PrivaScan