python中RabbitMQ的使用(路由鍵)

1.簡介python

當咱們但願每一個接收端接收各自但願的消息時,咱們能夠使用路由鍵,此時交換機的類型爲direct。post

2.工做原理spa

每一個接收端的消息隊列在綁定交換機的時候,能夠設定相應的路由鍵。命令行

發送端經過交換機發送信息時,能夠指明路由鍵 ,交換機會根據路由鍵把消息發送到相應的消息隊列。code

接收端能夠根據路由鍵獲取不一樣的消息隊列。blog

3.代碼隊列

send2.py路由

import pika

connection=pika.BlockingConnection(pika.ConnectionParameters("localhost"))
# 建立通道
channel=connection.channel()
channel.exchange_declare(exchange="change_dir",exchange_type="direct")
# 定義三個路由鍵
routings=["info","warning","error"]
# 將消息依次發送到交換機,並設置路由鍵
for routing in routings:
    messege='%s message'% routing
    channel.basic_publish(exchange="change_dir",routing_key=routing,body=messege)
    print(messege

          )
connection.close()

 

receive2.py消息隊列

import pika
import sys
connection=pika.BlockingConnection(pika.ConnectionParameters("localhost"))
# 建立通道
channel=connection.channel()
# 定義交換機,設置類型爲direct
channel.exchange_declare(exchange="change_dir",exchange_type="direct")
# 從命令行獲取路由鍵參數,若是沒有,則設置爲info
routings=sys.argv[1:]
if not routings:
    routings=["info"]
# 生成臨時隊列,並綁定到交換機上,設置路由鍵
result = channel.queue_declare('',exclusive=True)
queue_name = result.method.queue

for routing in routings:
    channel.queue_bind(queue_name,"change_dir",routing_key=routing)

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

channel.basic_consume(queue_name,callback,auto_ack=False)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

 

4.示例演示it

打開三個終端,在前兩個運行receive3.py:

python receive2.py info warning

python receive2.py error

 第三個終端運行send2.py:

查看接收端的消息:

咱們能夠發現,接收端只能獲取指定路由鍵的消息隊列。

 

 

相關文章
相關標籤/搜索