exchange 类型:
fanout:所有bind到此exchange 的queue 都可以接收到消息
direct: 通过routingkey和exchange 决定的那个唯一的queue 可以接收到消息
topic: 所有符合routingkey的routingkey所bind的queue 可以接收消息
表达式符合说明:
#代表一个或多个字符
*代表任何字符
header:通过headers来决定把消息发给哪些queue
工作原理:
消息发布者:
''' 广播 ''' import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() #声明一个exchange channel.exchange_declare(exchange='logs',exchange_type='fanout') message = 'hello my using fanout' channel.basic_publish(exchange='logs', routing_key='', body=message ) print("message:",message) connection.close()
消息接收者:
import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.exchange_declare(exchange='logs',exchange_type='fanout') #不指定queue 的名称,rabbitMQ 会随机生成一个 queue name , exclusive=True会使queue 的消费者断开后, 自动删除queue result = channel.queue_declare(exclusive=True) #获取随机生成的queue name queue_name = result.method.queue channel.queue_bind(exchange='logs',queue=queue_name) print("接收数据~~") def callback(ch,method,properties,body): print("接收到的数据:",body) channel.basic_consume(callback, queue=queue_name, no_ack=True) channel.start_consuming()