原理图:
消息广播者:
''' exchange 类型: fanout:所有bind到此exchange 的queue 都可以接收到消息 direct: 通过routingkey和exchange 决定的那个唯一的queue 可以接收到消息 接收端可以接收指定级别的消息:info , warning , error topic: 所有符合routingkey的routingkey所bind的queue 可以接收消息 表达式符合说明: #代表一个或多个字符 *代表任何字符 header:通过headers来决定把消息发给哪些queue ''' import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.exchange_declare(exchange='direct_logs',exchange_type='direct') msg = "using direct .." #消息级别 severity = 'info' channel.basic_publish(exchange='direct_logs',routing_key=severity,body=msg) print('send %s:%s'%(severity,msg)) channel.close()
消息接收者:
import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.exchange_declare(exchange='direct_logs',exchange_type='direct') result = channel.queue_declare(exclusive=True) queueName = result.method.queue severities = 'info' channel.queue_bind(exchange='direct_logs',queue=queueName,routing_key=severities) def callback(ch , method ,properties, body): print("接收:",body) print("routingKey:", method.routing_key) channel.basic_consume(callback,queue=queueName,no_ack=True) channel.start_consuming() channel.close()