???? SSI ????????

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python
???? SSI ????????
首頁 > 腳本專欄 > python > Python通過RabbitMQ實(shí)現(xiàn)交換機(jī)

Python通過RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程

作者:陳杰斌

RabbitMQ是一個(gè)基于消息隊(duì)列的服務(wù)器程序,Python可以通過Pika庫來驅(qū)動(dòng)它,這里我們將來看一個(gè)Python通過RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程:

快速回顧一下RabbitMQ服務(wù)器的安裝:

sudo apt-get install rabbitmq-server

Python使用RabbitMQ需要Pika庫:

sudo pip install pika

好了,接下來我們先看交換機(jī)的工作原理:消息發(fā)送端先將消息發(fā)送給交換機(jī),交換機(jī)再將消息發(fā)送到綁定的消息隊(duì)列,而后每個(gè)接收端都能從各自的消息隊(duì)列里接收到信息。

2016629180703866.png (608×187)

下面用send.py和receive.py來模擬實(shí)現(xiàn)交換機(jī)的功能。send.py表示發(fā)送端,receive.py表示接收端。

receive.py:

#!/usr/bin/env python
#coding=utf8
import pika
 
connection = pika.BlockingConnection(pika.ConnectionParameters(
        'localhost'))
channel = connection.channel()
 
#定義交換機(jī)
channel.exchange_declare(exchange='messages', type='fanout')
 
#隨機(jī)生成隊(duì)列,并綁定到交換機(jī)上
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='messages', queue=queue_name)
 
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()

上例代碼中,queue_declare的參數(shù)exclusive=True表示當(dāng)接收端退出時(shí),銷毀臨時(shí)產(chǎn)生的隊(duì)列,這樣就不會(huì)占用資源。運(yùn)行這個(gè)程序,然后使用rabbitmqctl list_exchanges命令來查看交換機(jī)信息:

2016629180811911.png (265×208)

其中紅色框就是上例定義的交換機(jī)了。再使用rabbitmqctl list_queues查看下消息隊(duì)列情況:

2016629180917024.png (318×82)

其中紅色框就是隨機(jī)產(chǎn)生的消息隊(duì)列了。

send.py:

#!/usr/bin/env python
#coding=utf8
import pika
 
connection = pika.BlockingConnection(pika.ConnectionParameters(
        'localhost'))
channel = connection.channel()
 
#定義交換機(jī)
channel.exchange_declare(exchange='messages', type='fanout')
 
#將消息發(fā)送到交換機(jī)
channel.basic_publish(exchange='messages', routing_key='', body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()

上例代碼中, basic_publish方法的參數(shù)exchange被設(shè)定為相應(yīng)交換機(jī),因?yàn)槭且獜V播出去,發(fā)送到所有隊(duì)列,所以routing_key就不需要設(shè)定了。

exchange如果為空,表示是使用匿名的交換機(jī),在上面交換機(jī)信息的圖片中可以看到有amq.*這樣的交換機(jī),就是系統(tǒng)默認(rèn)的交換機(jī)了。routing_key在使用匿名交換機(jī)的時(shí)候才需要指定,表示發(fā)送到哪個(gè)隊(duì)列的意思。第一篇的例子演示了這個(gè)功能。

打開另外一個(gè)終端,執(zhí)行send.py,可以觀察到receive.py接收到了消息。如果有多個(gè)終端執(zhí)行receive.py,那么每個(gè)receive.py都會(huì)接收到消息。

您可能感興趣的文章:
閱讀全文
???? SSI ????????
???? SSI ????????