2017-02-21 70 views
0

我正在創建一個工作隊列設置,其中不同的工作者/消費者具有不同的功能。我的意思是,並非所有的工作都可以由所有的工作人員來運作。RabbitMQ用於使用具有不同功能的消費者的工作隊列

比方說,我有以下人員:

Worker A 
    Capability 1 
    Capability 2 
    Capability 3 
Worker B 
    Capability 1 
Worker C 
    Capability 1 
    Capability 3 
  • 如果作業需要Capability 1,它可以通過任何工人運行。
  • 如果工作需要Capability 1Capability 2,它只能運行Worker A
  • 如果作業需要Capability 1Capability 3它可以通過Worker AWorker C
  • 等上運行...

問題

RabbitMQ的是能夠/適合調度工作對於這樣一個設置?

回答

0
Is RabbitMQ capable/suitable for dispatching jobs for such a setup? 

兔MQ是與它帶有許多其他更好的功能以及路由信息方面非常靈活。這絕對有能力做你想做的事。這是否合適是一個更難回答的問題,因爲它取決於許多其他因素。

這裏是設置你正在嘗試做

  1. 創建直接交換一種方式(讓我們把它叫做JobExchange)。
  2. 創建3隊列(JobType1.queue,JobType2.queue & JobType3.queue)
  3. Brind所有3個隊列到Exchange
  4. 工作者來說JobType1.queue,JobType2.queue & JobType3.queue
  5. 工人乙JobType1.queue
  6. 有無WorketÇJobType1.queue & JobType3.queue

注意:如果存在多個消費者其必須處理特定作業的能力(實施例:工人A,B & C可處理JobType1) ,沒有辦法控制誰從隊列中選取消息(在這種情況下爲JobType1.queue)。所以三名工作人員中的一名會接收到這個信息,另外兩名工作人員不會收到。

+0

謝謝。但是,有一件事可能有一個以上的要求。這是否意味着我必須爲每個需求組合創建隊列?這對我來說不是一種選擇,我擔心,因爲單個條件的數量大於20,因此所有的組合都會是非常多的隊列...... – anorm

+0

在這種情況下,需要更復雜的交換。像Topic/Headers Ex這樣的東西非常合適。通過Topic EX,您將不得不使用Routing Key層次結構進行創意,並查看是否可以過濾消息以適應您的需求。如果沒有真正的消息層次結構,那麼使用頭信息交換,您可以在其中設置多個頭,並根據您的需要告訴兔匹配ANY/ALL。作爲一個方面說明,如果你不能在第一級實現過濾,你可能需要創建一個交換層次結構並將它們分離到下游某處。提示:Ex - > Ex綁定是允許的。 –

相關問題