2010-12-05 243 views
0

想知道rabbitmq多個發佈者和消費者的行爲。 rabbitmq服務器一次給任何一個消費者發送一條消息,而其他消費者當時是理想的嗎?rabbitmq多個消費者和多個發佈者

OR

消費者挑選任何無人蔘與消息從隊列中,以便在一個時間,一個以上的消費者正在消耗從隊列中的消息?

基本上我正在設計一個數據庫隊列,並且不希望每次插入多個插入。

回答

0

來自隊列的消息將僅傳遞給一位消費者。即:一旦消息進入隊列 - 它不會被複制(廣播)給多個消費者。

如果你想做廣播 - 你必須使用多個隊列。

請參見本教程的詳細信息: http://www.rabbitmq.com/tutorial-two-python.html

-1

是,RabitMQ支持多個出版商和消費者。

  1. 多個出版商

    發佈一個messsge到rabbitmqyou需要聲明一個工廠,並盡到的RabbitMQ服務器的連接。 然後decare一個chennel到的RabbitMQ

    ConnectionFactory FACTORY = new ConnectionFactory 
    

    FACTORY.setUsername( 「客戶」)

    FACTORY.setPassword( 「客戶」)

    FACTORY.setVirtualHost( 「\」)

    FACTORY.setPort(5572)

    FACTORY.setHost(「localhost」)

    連接連接= FACTORY.newConnection 頻道信道= connection.createChannel

基本密鑰將消息路由是路由關鍵

channel.basicPublish(EXCHANGE_NAME, "Queue1", MessageProperties.PERSISTENT_TEXT_PLAIN, "msg1".getBytes) 

channel.basicPublish(EXCHANGE_NAME, "Queue2", MessageProperties.PERSISTENT_TEXT_PLAIN, "msg2".getBytes) 

這兩個消息將被髮布到一個單獨的隊列作爲每個路由鍵提隊列1和隊列2

2.Multiple消費者

多我們聲明一個隊列並綁定到一個特定的路由關鍵字 該消息將該路由關鍵字發佈給受尊重的隊列。

channel.exchangeDeclare(EXCHANGE_NAME, "direct", durable) 
    channel.queueDeclare("q1", durable, false, false, null) 
    channel queueBind ("q1", EXCHANGE_NAME,"queue1")// routing key = "queue1" 
    val q1Consumer = new QueueingConsumer(channel) 
    channel basicConsume ("q1", false, q1Consumer) 

這樣ü可以從第一隊列 消耗消息和這同樣適用於第二隊列,但指定路由密鑰作爲「隊列2」

channel.exchangeDeclare(EXCHANGE_NAME, "direct", durable) 
     channel.queueDeclare("q2", durable, false, false, null) 
     channel queueBind ("q2", EXCHANGE_NAME,"queue2") // routing key = "queue2" 
     val q2Consumer = new QueueingConsumer(channel) 
     channel basicConsume ("q2", false, q2Consumer) 
相關問題