2015-12-14 8 views
7

Bir Symfony'nin uygulamasına RabbitMQ entegrasyonu birçok (büyük) makaleleri okudum.Symfony: rabbitmq: consumer komutunu crontab'a eklemeliyim?

RabbitMqBundle çok kolay bunu nankör kolaylaştırır ve böyle bir sıradan iletileri tüketmeye uygun rabbitmq:consumer komutu sağlamaktadır:

app/console rabbitmq:consumer -m 50 upload_picture 

Ben ancak bir sorum var. Bu komutu crontab'a eklemenizi önerir misiniz? Bununla ilgili en iyi uygulamalar var mı?

+1

Bir yan not -m 50 her zaman güvenilir değildir. Örneğin, zaman zaman sıraya girecek birkaç yönteminiz varsa, kaybolan bağlantılarla ilgili sorunlarınız olacaktır. Uzun bir boşta kalma süresi nedeniyle olur. Komutun çalıştığı gerçek zamanı sınırlamak daha iyidir. Tüm bağlantı zaman aşımı bu sınıra bağlanabilir. Tüketici 1 saat çalışır ve çıkar, böylece zaman aşımı 1 saat 20 dakikaya ayarlanabilir. Bu bir tavşan meleği paketinin özlediği bir şey ama ense paketinde mevcut (--limit-time = "şimdi + 1 saat" seçeneği). –

cevap

6

daha kabul yöntem tüketici yayınlanmaya devam etmektir. Size yardımcı olabilecek Supervisor ve Circus gibi araçlar vardır. Bakınız this discussion. Ancak, daha fazla mesaj olmadığında tüketicilerinizin çıkmasını sağlayabilirsiniz, ayrıca cron kullanabilirsiniz. Bu, mesajların tüketilmesinde gecikmeye neden olabilir. Mesajlara anında tepki veremezsin. Herhangi bir görev başlatılmadan/posta alınmadan önce kullanıcıların bir dakika beklemesi gerekebilir. Uzun bir süre için tüketici (ya da bu konuda herhangi bir PHP kodu) çalıştırırken

dikkate aşağıdaki ayırın:

deneyin bellek kullanımı birikmesini önlemektir. Bunları hiçbir zaman temizlemeden dizilere eklemeyin. Bu, bu günlük mesajlarının bir tampon tutar beri Monolog içinde FingersCrossedHandler kullanmaması gerektiğini örneğin gelir. Tek bir istek için, hata ayıklama iletilerinin günlüğüne değil. Eğer dikkatli olduğunda

bile, PHP bellek sızıntısı olabilir. Eğer diyebilirim, PHP ... Ben bir cronjob her gece işçileri yeniden o yüklü benim durumda (Yani gerçekten de bir sloganı olabilir), ancak bellek bitmeden teoride tüketicilerin yaklaşık bir ay çalıştırabilir.

+5

Cevabınız için teşekkür ederiz. Symfony öğreticiler için RabbitMQ'da hiç bahsedilmediği gibi, tam olarak aradığım şey bu. RabbitMQBundle için otomatik Supervisord yapılandırmasını ele alan ilginç bir Symfony paketi var gibi görünüyor: https://github.com/Phobetor/rabbitmq-supervisor-bundle –

+1

"Bu tartışma" altındaki sorun linki kapalı. – Cassiano

+1

İlk yorumda bahsettiğim demekten kaçınmak, gerçek güvenilirlik sorunları var. –