2011-06-08 138 views
1

我想用AMQP做一些路由魔術。我的設置是在消費者/生產者一方使用Pika的Python,以及使用AMQP服務器的RabbitMQ。AMQP中的消息路由

我想什麼來實現:

  1. 將消息發送到一個單一的交換
  2. (此處插入魔術)
  3. 消耗的消息,像這樣:

    • 一組的用戶應該能夠基於路由密鑰來檢索
    • 一組用戶s應該只是得到所有的消息。

      棘手的部分是,如果第二個集合中的任何服務器收到一條消息,則第二個集合中沒有其他服務器會收到它。第一套服務器中的所有服務器仍應能夠使用此消息。

這可能與一個basic_publish電話或者我需要將消息發送到路由交換(對於第一套消費者)爲第二個「全球」匯率一組消費者?

澄清:

我想實現的是一個單一的 調用發佈消息,並請有2組不同 消費者收到 。

案例1:剛收到基於路由關鍵信息(這是一個 消息路由鍵foo將是所有消費者 目前感興趣的是主題中收到 )

案例2:這基本類似於RabbitMQ Tutorial for Worker Queues。 有一些工作人員 將以循環方式接收以 發送的消息。只有一個工作人員會收到一條消息

仍然是由有興趣在一定 路由關鍵應該是完全一樣的工人收到的消息消費者收到的消息,由單一的API調用生成 。

(希望我的問題是有道理的,我不是太熟悉AMQP方面)

+0

僅供參考,我發現你的問題很混亂,我對AMQP非常熟悉。主要是消費信息片。 – Nix 2011-06-08 19:40:47

+0

這可以通過利用聯邦的QPID(AMQP的apache實現)完成。但不幸的是,聯邦不是規範的一部分...我不確定RabbitMQ是否存在類似的功能.. – Nix 2011-06-08 19:44:42

+0

@Nix:我會嘗試重寫這個 – serverhorror 2011-06-08 19:51:35

回答

1

首先,你需要使用一個topic交流,並與每個隊列不同的路由鍵發佈消息。當消費者用綁定鍵(或要匹配的模式)將隊列綁定到隊列時,會發生奇蹟。一些消費者只是使用路由密鑰作爲綁定密鑰。但第二組將爲其綁定鍵使用通配符模式。

對於案例1,您需要爲每個使用者創建一個隊列,並使用適當的路由鍵綁定每個隊列。

對於案例2,只需創建一個路由鍵爲#的單個隊列,並讓您​​的每個工作人員消費者從中消費。經紀人將以循環方式派發給工人。

下面是它在RabbitMQ中的樣子的截圖。在這個例子中,你的「案例1」(Foo和Bar)有兩個消費者,所有工人都有一個隊列滿足「情況2」。

enter image description here

這種模式應該由所有AMQP符合經紀人的支持,並不會要求任何特定供應商的增強。

+0

好,所以我不能只發布一次,並且都有這兩種情況覆蓋? – serverhorror 2011-06-10 17:41:38

+0

是的,你可以。你爲什麼認爲你不能?相同的消息將被推送到具有匹配的路由密鑰方案的任何隊列。如果它匹配2個隊列,則相同的消息將在兩個隊列中結束(重複)。 – 2011-06-10 17:53:53

+0

好吧,有道理:)我需要工作可能會通過RabbitMQ教程再次.. – serverhorror 2011-06-10 18:24:02