教程:http://www.01happy.com/python-pika-rabbitmq-summary/
用的ubuntu16.04和python3,对于一些问题重新改过一些地方。可实际运行。
RabbitMQReceive.py //参数在这个文件里传,也就是python3 RabbitMQReceive.py sad.*
import time
import pika
import sys
connection=pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel=connection.channel()
#channel.queue_declare(queue='queue',durable=True)//测试队列的
#channel.exchange_declare(exchange='rout',exchange_type='direct',durable=True)//测试路由键的
#channel.exchange_declare(exchange='exch',exchange_type='fanout',durable=True)//测试广播的
channel.exchange_declare(exchange='topi',exchange_type='topic',durable=True)//测试模糊路由的
print('[*]Waiting for messages.To exit press CTRL+C')
routings=sys.argv[1:]
if not routings:
exit()
#channel.basic_publish(exchange='',routing_key='queue',body=)
result=channel.queue_declare(queue='',exclusive=True)
queueName=result.method.queue//生成随机队列
#channel.queue_bind(exchange='exch',queue=queueName,routing_key='')//测试广播的
for routing in routings:
channel.queue_bind(exchange='topi',queue=queueName,routing_key=routing)//测试模糊路由的
#channel.queue_bind(exchange='rout',queue=queueName,routing_key=routing)//测试路由键的
def callback(ch,method,properties,body):
print("[x]Received %r"%(body,))
#time.sleep(1)
#print("[x]Done")
#ch.basic_ack(delivery_tag=method.delivery_tag)
#channel.basic_qos(prefetch_count=1)//测试工作队列负载均衡的
#channel.basic_consume(queue='queue',callback)//测试工作队列的
channel.basic_consume(queueName,callback)
channel.start_consuming()
RabbitMQSend.py
import sys
import pika
connection=pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel=connection.channel()
#channel.queue_declare(queue='queue',durable=True)//测试工作队列的
#channel.exchange_declare(exchange='exch',exchange_type='fanout',durable=True)//测试广播的
#channel.exchange_declare(exchange='rout',exchange_type='direct',durable=True)
#routings=['info','warning','error']//测试路由键的
channel.exchange_declare(exchange='topi',exchange_type='topic',durable=True)//测试模糊路由的
routings=['happy.work','happy.life','sad.work','sad.life']
for routing in routings:
message='%s message.'%routing
#channel.basic_publish(exchange='rout',routing_key=routing,body=message)//测试路由键的
channel.basic_publish(exchange='topi',routing_key=routing,body=message)//测试模糊路由的
print(message)
#message=' '.join(sys.argv[1:])or "Hello World!"
#channel.basic_publish(exchange='exch',routing_key='',body=message,properties=pika.BasicProperties(delivery_mode=2,))//测试广播的,ps:delivery_mode=2是持久化队列的
#channel.basic_publish(exchange='',routing_key='queue',body=message,properties=pika.BasicProperties(delivery_mode=2,))//测试工作队列的
#print("[x]Sent %r"%(message,))
connection.close()
关于工作队列:
//终端1
//终端2:这个是后开的,同时开则都是两条
关于广播:
//终端1:这个是后开的,所以收到的少了两条
//终端2
关于模糊路由键:
//终端1和终端2,在同一次send中得到不同的主题信息。