python中RabbitMQ的使用(交换机,广播形式)

时间:2023-03-09 01:57:23
python中RabbitMQ的使用(交换机,广播形式)

简介

如果要让每个接收端都能收到消息,此时需要将消息广播出去,需要使用交换机。

工作原理

消息发送端先将消息发送给交换机,交换机再将消息发送到绑定的消息队列,而后每个接收端都能从各自的消息队列里接收到信息。

python中RabbitMQ的使用(交换机,广播形式)

示例代码

send2.py:

 #!/usr/bin/env python
# coding=utf8
# 每次消息都只会发送给其中一个接收端,如果需要将消息广播出去,让每个接收端都能收到,那么就要使用交换机
# 定义交换机
# 不是将消息发送到hello队列,而是发送到交换机 import pika hostname = '192.168.1.133'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters) channel = connection.channel()
# 定义交换机,设置类型为fanout
channel.exchange_declare(exchange='change_fan', type='fanout') # 将消息发送到交换机
# basic_publish方法的参数exchange被设定为相应交换机
# 因为是要广播出去,发送到所有队列,所以routing_key就不需要设定
channel.basic_publish(exchange='change_fan', routing_key='', body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()

receive2.py:

 #!/usr/bin/env python
# coding=utf8
# 定义交换机
# 随机生成一个临时队列,并绑定到交换机上,从而接收端从临时队列获取消息
import pika hostname = '192.168.1.133'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters) channel = connection.channel()
# 定义交换机,设置类型为fanout
channel.exchange_declare(exchange='change_fan', type='fanout') # queue_declare的参数exclusive=True表示当接收端退出时,销毁临时产生的队列,这样就不会占用资源。
result = channel.queue_declare(exclusive=True)
# 随机生成队列,并绑定到交换机上
18 queue_name = result.method.queue
19 channel.queue_bind(exchange='change_fan', 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()