2015-09-07 15 views
1

我想有在RabbitMQ的一個隊列此約束出隊:RabbitMQ的:下一個消息只能後以前被ACKED

在隊列

下一頁消息不能先前消息之前出隊(一個正在處理)是acked。

通過這個,我將實現跨多個隊列的事件和並行處理的有序處理。我該如何配置RabbitMQ?

編輯(澄清):將有許多消費者試圖從所有隊列中獲得工作,並且因爲他們無法從隊列中獲得工作,而該隊列中的事件正在處理中,而不是收集 - 維護了有序處理。

回答

3

在先前的消息(正在處理的消息)被確認之前,隊列中的下一條消息不能被出隊。

您可以通過consumer prefetch limit爲單個消費者做到這一點。

通過這個,我將實現跨多個隊列的事件和並行處理的有序處理。

不幸的是,這不會有你想要的效果。

您可以爲個人消費者設置。消費者在獲得下一個消息之前會等待消息被確認。

但是,這適用於個人消費者,而不是隊列。

如果您有2個消費者,他們每個人都會並行處理消息。如果您有10位消費者,則10條消息將並行處理。

以處理每封郵件的唯一辦法,就是有一個消費者與1

+0

預取,我會補充說,其聲明爲'exclusive'可以做的工作在某些情況下隊列。在這種情況下,隊列可以限制爲創建連接,因此消費者編號可以輕鬆控制。除此之外,死書法和交替交換可用於在某處捕獲錯過的消息。 – pinepain

+0

謝謝你的回答。我已經補充說明了這個問題。將有許多工人試圖從所有隊列中排隊。這是爲了實現並行性和可用性。因此,在消費者身上施加限制是不夠的,它需要排隊等候。 – ytoledano

+0

答案保持不變。它不能由多個消費者完成。即使你有一個排隊隊列,在這個連接中有多個消費者仍然是多個消費者。您將要麼進行並行處理,要麼您將進行有序處理。這不是rabbitmq的限制,而是一般分佈式系統/消息傳遞的限制。沒有系統支持這個,因爲這是不可能的。 –

相關問題