python send 案例_python使用rabbitmq实例三,交换机
上面一篇是說到了工作隊列,每次消息都只會發送給其中一個接收端,如果需要將消息廣播出去,讓每個接收端都能收到,那么就要使用交換機。
交換機的工作原理:消息發送端先將消息發送給交換機,交換機再將消息發送到綁定的消息隊列,而后每個接收端都能從各自的消息隊列里接收到信息。
rabbitmq交換機工作原理
下面用send.py和receive.py來模擬實現交換機的功能。send.py表示發送端,receive.py表示接收端。
receive.py代碼分析
和第一篇里的receive.py相比,主要是做了兩個改動:
定義交換機
不使用hello隊列了,隨機生成一個臨時隊列,并綁定到交換機上
#!/usr/bin/env python
#coding=utf8
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
#定義交換機
channel.exchange_declare(exchange='messages', type='fanout')
#隨機生成隊列,并綁定到交換機上
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的參數exclusive=True表示當接收端退出時,銷毀臨時產生的隊列,這樣就不會占用資源。運行這個程序,然后使用rabbitmqctl list_exchanges命令來查看交換機信息:
rabbitmq交換機信息查看
其中紅色框就是上例定義的交換機了。再使用rabbitmqctl list_queues查看下消息隊列情況:
rabbitmq隊列信息查看
其中紅色框就是隨機產生的消息隊列了。
send.py代碼分析
和第一篇的send.py相比,也只做了兩個改動:
定義交換機
不是將消息發送到hello隊列,而是發送到交換機
#!/usr/bin/env python
#coding=utf8
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
#定義交換機
channel.exchange_declare(exchange='messages', type='fanout')
#將消息發送到交換機
channel.basic_publish(exchange='messages', routing_key='', body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()
上例代碼中, basic_publish方法的參數exchange被設定為相應交換機,因為是要廣播出去,發送到所有隊列,所以routing_key就不需要設定了。
exchange如果為空,表示是使用匿名的交換機,在上面交換機信息的圖片中可以看到有amq.*這樣的交換機,就是系統默認的交換機了。routing_key在使用匿名交換機的時候才需要指定,表示發送到哪個隊列的意思。第一篇的例子演示了這個功能。
打開另外一個終端,執行send.py,可以觀察到receive.py接收到了消息。如果有多個終端執行receive.py,那么每個receive.py都會接收到消息。
總結
以上是生活随笔為你收集整理的python send 案例_python使用rabbitmq实例三,交换机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 首字母变大写
- 下一篇: 计算最长的字符串长度