2014-08-27 380 views
8

問題出在哪裏:如何限制RabbitMQ的吞吐量?

我們使用RabbitMQ作爲任務隊列。具體任務之一 - 向Vkontakte社交網絡發送通知。他們的api限制了每秒請求和這個限制,根據您的應用程序大小。只有3個人要求少於10萬人的應用程序等。所以我們需要人爲地限制他們服務的請求。現在這個邏輯是基於應用的。這很簡單,你可以使用每個這樣的隊列只有一個工人,只是設置像睡眠(300毫秒),並保持冷靜。但是當你應該使用N個工人時,這種同步變得不平凡。

如何限制吞吐量與RabbitMQ?

根據以上的故事。如果可以將預取大小設置爲不僅基於消息而且基於此邏輯的時間可以非常簡單。例如,「每次讀取的qos爲1個消息不會更快,然後以秒爲單位」等等。

  1. 有沒有這樣的事情?
  2. 可能是其他策略嗎?
+0

您是否將N個消費者用於同一隊列? 你需要「排程」多一個隊列嗎? – Gabriele 2014-08-27 10:02:53

+0

是的,N個消費者在同一隊列中。它應該每隊排隊。 – misterion 2014-08-27 10:13:42

回答

1

這是RabbitMQ不可能開箱的。

你是對的,對於分佈式消費者來說,這種節流成爲一項艱難的工作。我建議看一看ZooKeeper,它可以讓你同步所有消費者,並通過利用它的Znodes/Watches 來限制可縮放的解決方案來限制消息的處理。