2014-08-27 21 views
8

soru yaptım :RabbitMQ ile çıktı nasıl sınırlanır?

Biz görev sırası olarak RabbitMQ kullanıyor. Belirli görevlerden biri - Vkontakte sosyal ağına bildirim gönderme. Api, saniye başına istek sınırlamasına ve uygulama sınırınıza bağlı olarak bu limite sahiptir. Sadece 3 kez daha az 100k kişi ve daha fazlası ile uygulama çağırır. Bu nedenle, hizmet için istekleri yapay olarak sınırlandırmamız gerekiyor. Şimdi bu mantık uygulama tabanlı. Bu sıraya göre sadece bir çalışanı kullanabilirsiniz, sadece uyku (300ms) gibi bir şey ayarlayın ve sakin olun. Ancak, N çalışanlarını kullanmanız gerektiğinde, bu senkronizasyon önemsiz olmaz.

RabbitMQ ile işlem hacmi nasıl sınırlandırılır?

Yukarıdaki öyküye dayanmaktadır. Eğer mümkün olsaydı, prefetch boyutu sadece mesaj tabanlı değil, aynı zamanda bu mantığa dayanan zaman çok basit olabilir. Örneğin, "getirme başına 1 mesajın saniyede 1 kez daha hızlı olmaması" vb.

  1. Böyle bir şey var mı?
  2. Bu konuda başka bir strateji olabilir mi? RabbitMQ ile kutudan çıkılması mümkün değildir.
+0

N tüketiciyi aynı sıraya kullanıyor musunuz? Bir tane daha fazla kuyruk "programlamak" gerekiyor mu? – Gabriele

+0

Evet, N sıradaki tüketiciler aynı sırada. Sıra başına sheduled olmalıdır. – misterion

cevap

1

Haklısınız, dağıtılmış tüketicilerle bu kısıtlama zor bir alıştırma haline gelir. Tüm tüketicileri senkronize etmenizi ve mesajların işlenmesini sağlamanızı sağlayan ZooKeeper'a bir göz atmanızı öneririm. Znodes/Watches daraltılmış ama ölçeklenebilir bir çözüm.

İlgili konular