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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中RabbitMQ的使用(交换机,广播形式)相关的知识,希望对你有一定的参考价值。

简介

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

工作原理

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

技术分享

示例代码

send2.py:

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

receive2.py:

 1 #!/usr/bin/env python
 2 # coding=utf8
 3 # 定义交换机
 4 # 随机生成一个临时队列,并绑定到交换机上,从而接收端从临时队列获取消息
 5 import pika
 6 
 7 hostname = 192.168.1.133
 8 parameters = pika.ConnectionParameters(hostname)
 9 connection = pika.BlockingConnection(parameters)
10 
11 channel = connection.channel()
12 # 定义交换机,设置类型为fanout
13 channel.exchange_declare(exchange=‘change_fan‘, type=‘fanout‘)
14 
15 # queue_declare的参数exclusive=True表示当接收端退出时,销毁临时产生的队列,这样就不会占用资源。
16 result = channel.queue_declare(exclusive=True)
17 # 随机生成队列,并绑定到交换机上
18 queue_name = result.method.queue
19 channel.queue_bind(exchange=‘change_fan‘, queue=queue_name)
20 
21 
22 def callback(ch, method, properties, body):
23     print " [x] Received %r" % (body,)
24 
25 channel.basic_consume(callback, queue=queue_name, no_ack=True)
26 
27 print  [*] Waiting for messages. To exit press CTRL+C
28 channel.start_consuming()

 

以上是关于python中RabbitMQ的使用(交换机,广播形式)的主要内容,如果未能解决你的问题,请参考以下文章

C#利用RabbitMQ实现消息订阅与发布

SpringBoot整合RabbitMq广播模式动态队列名称

RabbitMQ 如何实现对同一个应用的多个节点进行广播

[rabbitmq] python版本 路由

RabbitMQ 07 发布订阅模式

RabbitMQ学习 (主题)