Zend Kuyruk Alıcısı Koşu için Altyapı

1 Cevap php

Ben basit bir mesajlaşma sıra kurulum ve Zend_Queue nesne hiyerarşi kullanarak çalışıyorsa. Ben bir Zend_Queue_Adapter_Db arka-uç kullanıyorum. Ben daha sonraki bir zamanda işleme için bir şeyler planlamak için, bir iş kuyruğunda olarak kullanarak ilgileniyorum. Onlar hemen gerçekleşmesi gerekmez işler, ama er ya da geç gerçekleşmesi gerekir.

Kurulum işlerini çalıştırmak için altyapı için bir best-practices/standard yolu var mı? Ben sıradan bir mesajı almak için kodu anlamak, ama bana o kadar net değil ne olduğunu alınmasını yapar programı çalıştırmak nasıl. Komut satırında n iletileri aldığında bir cron, bir dakika bir kez çalıştırmak? Birden fazla web istekleri patlar bir cron, alıcı komut dosyasını çalıştıran her web isteği? Başka bir şey?

Teğet bir bonus soru. Ben Zend_Db'nin diğer sorguları koşuyorum varsa, ileti kuyruğu sorgular, bu işlemin bir parçası olarak kabul edilecektir?

1 Cevap

Sen bir iş parçacığı havuzu gibi yapabilirsiniz. Alma işlemek için bir komut satırı php komut dosyası oluşturun. Bu ölürse otomatik işlem yeniden başlatılır bir kabuk tarafından başlatılması gerekmektedir. Zaten (benzer bir $ pid.running dosya veya kullanmak) çalışıyorsa kabuk komut işlemini başlatmak gerekir. Bu, her 1-10 dakikada çeşitli cron çalıştırmak var. Bu güzel alma işlemesi gerekir.

Cron bazı garip nedenle başka bir sunucudaki sürece ben cron yangını bir web isteği olmazdı.

Bunu kullanmak için başka bir yolu bazı backround işlem verilerini oluşturmak için olurdu ve onlar doğal olarak siteye göz olarak bir web kullanıcı (lar) tüketmek. Bir rapor üreteci bu şekilde işe yarayabilir. Şirket çapında raporlar tüm kullanıcılar için kullanılabilir ancak onlara bu db / zaman yoğun raporu üreten istemiyorum. Yani bir kuyruk oluşturmak ve olası bir zamanda çiftleri kaldırarak teker işlemek. Hazır olduğunda tüm kullanıcıların raporu (ler) görebilirsiniz.

According to the docs bu zend db bile diğer Zend_Db sorgular gibi aynı bağlantıyı kullanıyor gibi görünüyorsun doens't. Ama tabii öğrenmek için en iyi yolu, basit bir test yapmaktır.

EDIT The multiple lines in the cron are for concurrency. each line represents a worker for the pool. I was not clear, you don't want the pid as the identifier, you want to pass that as a parameter.

          • / Home / byron / run_queue.sh Process1
          • / Home / byron / run_queue.sh Process2
          • / Home / byron / run_queue.sh işleri3

O çıkmak bulursa betik $ process.running dosyasını kontrol ediyorum.

Aksi takdirde:

  • $ Process.running dosyası oluşturun.
  • php işlemini başlatmak. Bitirene kadar blok / bekleyin.
  • $ Process.running dosyasını silin.

Php komut ölür ama havuz bir işçi gevşek neden için bu sağlar.

Sıra boşsa php script hemen çıkar ve cron'nun nex çağırma tarafından yeniden başlatılır.