事實證明,我對AMQP的理解並不完整。
的想法是如下:
客戶:
獲得連接應該不會在乎任何東西,但交換的名稱和路由鍵後的客戶端。這是我們不知道哪個隊列,這將在結束了。
channel.basic_publish(exchange='order',
routing_key="order.test.customer",
body=pickle.dumps(data),
properties=pika.BasicProperties(
content_type="text/plain",
delivery_mode=2))
消費者
當該通道是開放的,我們聲明的交流和隊列
channel.exchange_declare(exchange='order',
type="topic",
durable=True,
auto_delete=False)
channel.queue_declare(queue="test",
durable=True,
exclusive=False,
auto_delete=False,
callback=on_queue_declared)
當隊列已準備就緒,在「on_queue_declared」回調中是一個不錯的地方,我們可以使用我們期望的路由密鑰將隊列綁定到交換機上。
channel.queue_bind(queue='test',
exchange='order',
routing_key='order.test.customer')
#handle_delivery is the callback that will actually pickup and handle messages
#from the "test" queue
channel.basic_consume(handle_delivery, queue='test')
消息發送到與路由鍵「命令」交換「order.test.customer」現在將被路由到「測試」隊列,其中消費者可以把它撿起來。
無效的問題:我從來沒有看到任何標準的完成實施。他們總是缺乏實施細節。 – 2011-03-27 11:40:35
「文檔使用較舊版本的Pika,所以我忽略了他們的示例代碼。」這是一個真正的問題,影響到許多嘗試從官方rabbitMQ網站上手(pika)的人。我甚至克隆了他們的示例代碼,並試圖運行它們(安裝rabbitMQ服務器並且沒有SELinux問題),但沒有獲得預期的結果。 – Andreas 2014-12-25 16:55:04