2014-01-15 48 views
0

標題中的所有內容:從rabbitmq的文檔中的以下方法中,我們看到發佈以交換爲參數,但消費者並不是。如何在皮卡消費者中指定交易所?

另外,雖然我在它,queue在消費者是一樣的routing_key在發佈?我認爲,一個路由鍵就像一個標籤,這樣用戶訂閱的標籤不同的正則表達式

代碼來使用:

import pika 
def callback(ch, method, properties, body): 
    print " [x] Received %r" % (body,) 

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) 
channel = connection.channel() 
channel.queue_declare(queue='hello') 
channel.basic_consume(callback, queue='hello', no_ack=True) 
channel.start_consuming() 

代碼發佈:

import pika 
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) 
channel = connection.channel() 
channel.queue_declare(queue='hello') 
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') 
connection.close() 

回答

1

你越來越感到困惑RabbitMQ如何工作。在RabbitMQ中,您總是將消息發佈到Exchange。交換與將邏輯接收器路由到Queue(或一組隊列)沒有什麼不同。

根據Exchange的類型,此路由發生的方式不同。有不同的類型:Direct,Fanout,Topic和Headers。將Exchange鏈接到Queue的方式是使用Binding。綁定由一個路由鍵或一些頭部定義,並將您的消息從特定交換路由到特定隊列。總之,你發佈信息到Exchange。您使用Queue的消息。並且您使用Binding將消息從Exchange路由到Queue。也就是說,沒有辦法說消費者從Exchange消費。

在您的具體情況下,您在郵件中使用了路由鍵'hello'。這意味着您需要使用Exchange中的Binding,這個Exchange被稱爲''到Queue,被稱爲'hello',其路由關鍵字與您的消息(即'hello')相同。我會建議你更改名稱並使用更多有用的名稱來查看正在發生的事情。

希望這會有所幫助!

相關問題