2015-04-04 93 views
0

我的工作人員數量有限,並且使用掩碼「q。*」命名的隊列數量不受限制(例如,q.1q.2)。我需要依次處理它們 。每個工人一項任務。工作人員完成任務後,將從下一個現有隊列接收新的任務。使用RabbitMQ逐一處理隊列

例如我有隊列:

q.1: task11, task12, task13 
q.2: task21, task22, task23 

和三名工人。我希望執行的下一條指令:

worker1: task11 
worker2: task21 
worker3: task12 
worker1: task22 
worker2: task13 
worker3: task23 

我試圖用topic和訂閱掩蓋q.*但是這會導致每個工人從所有隊列接收任務的事實。什麼是正確的決定?

+0

你能解釋一下多一點,爲什麼你需要這個特殊的設置嗎?如果您需要從隊列中僅消費一條消息,則可以使用basic.qos(prefetch_count = 1)或basic.get – 2015-04-13 21:17:54

回答

0

將每個隊列看作是自己的一桶工作。 q.1與q.2根本沒有關係,實際上甚至不知道它存在。它可能會以q.2的速度處理不同的事情,並且應該有不同的消費者。 q.1上的工作人員只應關注q.1,不應在q.1和q.2之間來回反彈。

您是否試圖將2個隊列鏈接在一​​起?如果是這樣,你可以有這樣的事情:

  1. 消息被投入Q.1
  2. 消息是由工作人員進行處理(稱之爲worker1)Q.1的
  3. worker1的ACK消息後,它再插入一個新的消息到Q.2
  4. 消息是由工作人員進行處理(稱之爲worker2)Q.2的