2016-03-28 151 views
1

閱讀常見消息隊列系統(例如RabbitMQ,ActiveMQ)的文檔,似乎負載平衡總是由排隊系統(循環)或由生產者使用多個隊列完成或消息屬性。然而,在我們的應用程序中,沒有人,甚至沒有消費者知道處理消息需要多長時間。它可以在幾毫秒到幾小時之間(它基本上是在任意輸入x上計算任意函數f)。因此負載平衡應由消費者執行,因爲它們只在「負載」低於閾值時才接受消息(負載可以是執行作業的數量,CPU負載等)。理想情況下,生產者將消息放入隊列中,消息被「提供」給所有消費者,但只有一個消費者接受並處理消息。甚至可能發生的情況是,沒有消費者在第一輪接受它,並且在一個消費者擁有免費資源之前它會一直處於隊列中。 所以可能的問題是:這在某種程度上可能與任何常見的消息隊列系統是可能的,還是我們正在尋找錯誤的方向?基於消費者負載均衡的消息隊列

回答

0

這是可以實現的,沒有任何真正的額外工作,只是由於這些系統的性質。在RabbitMQ中,您可以設置一個prefetch size,它指定要提前提取的作業數量。您將其設置爲0,以便每個消費者一次只能有一份工作。您希望將其與消息確認結合使用,以便消費者在提供消息之前必須先回復消息。

所有閒置的使用者將排隊等待作業,並且MQ將按FIFO順序將作業推遲給他們。一旦他們完成了處理他們的工作,他們就會確認並且MQ給他們下一份工作。如果沒有消費者閒置並準備好工作,則該消息位於隊列中,直到消費者變得可用。

+0

謝謝,這聽起來很完美。我會試一試。 – sithmein

相關問題