Python rabbitmq的使用(四)

黄舟
發布: 2017-01-17 14:57:19
原創
1645 人瀏覽過

第三篇說明了關於交換機的使用,已經能實現給所有接收端發送訊息,但是如果需要自由定制,有的消息發給其中一些接收端,有些消息發送給另外一些接收端,該怎麼辦呢?這種情況下就要用到路由鍵了。


路由鍵的工作原理:每個接收端的訊息佇列在綁定交換器的時候,可以設定對應的路由鍵。當傳送端透過交換器傳送訊息時,可以指明路由鍵 ,交換機會根據路由鍵把訊息傳送到對應的訊息佇列,這樣接收端就能接收到訊息了。


這邊繼上一篇,還是用send.py和receive.py來模擬實現路由鍵的功能。 send.py表示發送端,receive.py表示接收端。實例的功能就是將info、warning、error三種層級的資訊傳送到不同的接收端。


send.py代碼分析


和上一篇相比,改動點主要在兩個方面:

設定交換器的類型(type)為direct。上一篇是設定為fanout,表示廣播的意思,會將訊息傳送到所有接收端,這裡設定為direct表示要根據設定的路由鍵來傳送訊息。 
發送訊息時設定發送的路由鍵。 

#!/usr/bin/env python
#coding=utf8
import pika
connection= pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel= connection.channel()
#定义交换机,设置类型为direct
channel.exchange_declare(exchange='messages',type='direct')
#定义三个路由键
routings= ['info','warning','error']
#将消息依次发送到交换机,并设置路由键
for routingin routings:
message= '%s message.' % routing
channel.basic_publish(exchange='messages',
routing_key=routing,
body=message)
print message
connection.close()
登入後複製

receive.py程式碼分析


和第三篇相比,改動點主要在三個方面:

設定交換器的類型(type)為direct。 
增加命令列取得參數功能,參數即為路由鍵。 
將佇列綁定到交換器上時,設定路由鍵。 

#!/usr/bin/env python
#coding=utf8
import pika, sys
connection= pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel= connection.channel()
#定义交换机,设置类型为direct
channel.exchange_declare(exchange='messages',type='direct')
#从命令行获取路由键参数,如果没有,则设置为info
routings= sys.argv[1:]
if not routings:
routings= ['info']
#生成临时队列,并绑定到交换机上,设置路由键
result= channel.queue_declare(exclusive=True)
queue_name= result.method.queue
for routingin routings:
channel.queue_bind(exchange='messages',
queue=queue_name,
routing_key=routing)
def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
channel.basic_consume(callback, queue=queue_name, no_ack=True)
print ' [*] Waiting for messages. To exit press CTRL+C'
channel.start_consuming()
登入後複製

開啟兩個終端,一個執行程式碼python receive.py info warning,表示只接收info和warning的訊息。另外一個終端運行send.py,可以觀察到接收終端只接收到了info和warning的訊息。如果開啟多個終端運行receive.py,並傳入不同的路由鍵參數,可以看到更明顯的效果。


當接收端正在運作時,可以使用rabbitmqctl list_bindings來查看綁定情況。


以上就是Python rabbitmq的使用(四)的內容,更多相關內容請關注PHP中文網(www.php.cn)!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!