# -*- coding: UTF-8 -*- import pika,time username = 'guest'#指定远程rabbitmq的用户名密码 pwd = 'guest' user_pwd = pika.PlainCredentials(username, pwd) #s_conn = pika.BlockingConnection(pika.ConnectionParameters('10.10.10.190')) s_conn = pika.BlockingConnection(pika.ConnectionParameters('192.168.199.11', credentials=user_pwd))#创建连接 chan = s_conn.channel()#在连接上创建一个频道 chan.queue_declare(queue='MMMMM',durable=True)#声明一个队列,生产者和消费者都要声明一个相同的队列,用来防止万一某一方挂了,另一方能正常运行 def callback(ch,method,properties,body): # 定义一个回调函数,用来接收生产者发送的消息 # print('ch',ch) #连接频道的内存地址 # print(method) # # print(properties) # print(body) #消息队列的内容 # time.sleep(20) print("[消费者]收到消息:%s" % body) ch.basic_ack(delivery_tag=method.delivery_tag) # 保证消息不丢失(处理完成以后,给生产者发送确认信息,生产者才会把消息从队列里删除) # pip0.12版本写法 # chan.basic_consume(callback, #调用回调函数,从队列里取消息 # queue='hello',#指定取消息的队列名 # no_ack=True) #取完一条消息后,不给生产者发送确认消息,默认是False的,即 默认给rabbitmq发送一个收到消息的确认,一般默认即可 # pip 1.01版本写法 chan.basic_qos( prefetch_count= 1 ) #设定当队列中有1条消息的时候,不再接受新消息 chan.basic_consume( queue='MMMMM',#指定取 消息的队列名 on_message_callback=callback, #调用回调函数,从队列里取消息,收到消息调用callback来处理消息 #auto_ack=True #取完一条消息后,不给生产者发送确认消息,默认是False的,即 默认给rabbitmq发送一个收到消息的确认,一般默认即可 # 这里注释掉代表:当消费者消费了消息以后,没有给生产发送确认信息,消息则不会被删除,除非消费者回复了确认信息,消息才会被删除 ) print('[消费者] 等待消息中.............') chan.start_consuming()#开始循环取消息