#coding=utf-8 import pika import time connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hellow',#这里为什么会重新声明一个队列,是因为不确定是客户端先启动还是服务端先启动,所以先确认队列存在 durable=True) #防止rabbitmq服务器挂掉数据丢失了,队列持久化,durable只保存了队列,不保存队里里面的数据 def callback(ch,method,properties,body): #回调函数 print '收到消息:',body time.sleep(30) print '消息处理完毕:', body channel.basic_consume(callback,queue='hellow', #no_ack=True 需要客户端确认,如果正在处理消息的时候客户端挂掉就会转到下一个客户端,会等待消息完整的处理完 )#如果收到消息就调用callback来处理消息 print '等待接收消息。。。。。' channel.start_consuming() #循环持续运行下去 #消息持久化
已经定义的队列,再次定义是无效的,这就是幂次原理。RabbitMQ不允许重新定义一个已有的队列信息,也就是说不允许修改已经存在的队列的参数。如果非要这样做,只会返回异常。