关键字模式
相当于把发布订阅模式进行加工,添加了新的功能
-
生产者模式
from pika import ConnectionParameters, BlockingConnection connection = BlockingConnection(ConnectionParameters(host='localhost')) channel = connection.channel() # 创建一个交换机 channel.exchange_declare( exchange='logs', exchange_type='direct', # 指定交换机模式是关键字交换机 ) """ 给多个转换机发送 channel.basic_publish( exchange='logs', routing_key='info', body=message ) channel.basic_publish( exchange='logs', routing_key='error', body=message ) 给单个转换机发送 channel.basic_publish( exchange='logs', routing_key='error', body=message ) """ message = 'info:This is very big BUG' channel.basic_publish( exchange='logs', routing_key='info', body=message ) print('[*] This send message is {message}'.format(message=message)) connection.close()
-
消费者模式
from pika import ConnectionParameters, BlockingConnection connection = BlockingConnection(ConnectionParameters(host='localhost')) channel = connection.channel() channel.exchange_declare( exchange='logs', exchange_type='direct' ) # 创建一个消息队列 result = channel.queue_declare( queue='', exclusive=True ) queue_name = result.method.queue print('This exchange name is {name}'.format(name=queue_name)) # 将交换机和消息队列绑定起来 """ 绑定单个消息队列 channel.queue_bind( queue=queue_name, exchange='logs', routing_key='info', # 直接这个关键字的消息 ) 绑定多个消息队列 channel.queue_bind( queue=queue_name, exchange='logs', routing_key='info', # 直接这个关键字的消息 ) channel.queue_bind( queue=queue_name, exchange='logs', routing_key='error', # 直接这个关键字的消息 ) channel.queue_bind( queue=queue_name, exchange='logs', routing_key='warings', # 只接收这个关键字的消息 ) """ channel.queue_bind( queue=queue_name, exchange='logs', routing_key='info', # 只接收这个关键字的消息 ) def callback(ch, method, properties, body): print('接收到的数据是{}'.format(body)) # 获取那个消息对列的数据 channel.basic_consume( queue=queue_name, auto_ack=True, on_message_callback=callback, ) channel.start_consuming()