python操作rabbitmq实现消息过滤接收

目标:

  

代码实现(direct_product.py)

 1 # __author__ = 'STEVEN'
 2 import pika,sys
 3 #开启socket
 4 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
 5 #开启一个通道
 6 channel = connection.channel()
 7 #这里不用再创建队列
 8 channel.exchange_declare(exchange='d_logs',exchange_type='direct')
 9 #通过命令行运行本代码,指定要发送的消息级别,如果不指定则为info
10 severity = sys.argv[1] if len(sys.argv)>1 else 'info'
11 #通过命令行输入消息级别后的参数
12 mes = ''.join(sys.argv[2:]) or 'hello world'
13 #添加了消息级别,即将消息发布到指定了级别的消息队列
14 channel.basic_publish(exchange='d_logs',routing_key=severity,body=mes)
15 print('[x] send the mes%s to queue'%mes)
16 connection.close()
View Code

代码实现(direct_consumer.py)

 1 # __author__ = 'STEVEN'
 2 import pika,sys
 3 #建立socket
 4 connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
 5 #开启通道
 6 channel = connection.channel()
 7 #通道先声明exchange类型
 8 channel.exchange_declare(exchange='d_logs',exchange_type='direct')
 9 #声明queue
10 result = channel.queue_declare(exclusive=True)
11 #获取queue_name
12 queue_name = result.method.queue
13 #从sys中获取消息级别等信息
14 severitis = sys.argv[1:]
15 if not severitis:
16     sys.stderr.write('usage:%s [info] [error] [warning]'%sys.argv[0])
17     sys.exit(1)
18 #遍历绑定各个exchange和queue以及消息级别
19 for severity in severitis:
20     #绑定queue
21     channel.queue_bind(exchange='d_logs',routing_key=severity,queue=queue_name)
22 #回调函数
23 def callback(ch,method,properties,body):
24     print('[x] receive mess :%s'%body.decode())
25 #指定消费相关参数
26 channel.basic_consume(callback,queue=queue_name,no_ack=True)
27 print('[*] is waiting for the message')
28 #开启消费
29 channel.start_consuming()
View Code

运行注意:

  先开启消费端,用命令行指定接受级别

posted @ 2018-01-02 22:05  海的味道  阅读(1519)  评论(0编辑  收藏  举报