RabbitMQ 详解
RabbitMQ 是一种服务器
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。
应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来连接它们。
简单来说 RabbitMQ 是封装了 AMQP 协议(或者其他)的一个库,通过队列,交换,以及回调函数等来实现信息的交换。
生产者代码
#RabbitMQ使用AMQP 0.9.1,这是一种开放的,通用的消息传递协议 #Pika是AMQP 0-9-1协议的纯Python实现,试图保持与底层网络支持库相当独立 import pika #建立安装RabbitMQ 的服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() #创建一个将要传递消息的hello队列 channel.queue_declare(queue = 'hello') #消息永远不能直接发送到队列,它总是需要通过交换,routing_key参数中指定队列名称 channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") #关闭发送连接 connection.close()
消费者代码
#!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): print(" [x] Received %r" % body) #每当我们收到消息时,Pika库都会调用此回调函数callback。 #告诉RabbitMQ这个特定的回调函数应该从我们的hello队列接收消息 channel.basic_consume(callback, queue='hello', no_ack=True) #在我们的例子中,此功能将在屏幕上显示消息的内容 print(' [*] Waiting for messages. To exit press CTRL+C') #进入一个永不停止的循环,等待数据并在必要时运行回调。 channel.start_consuming()
首先运行消费着,进行等待,然后运行生产者进行消息发送
#首先运行消费者,等待消息 python consumer.py #然后运行生产者 python producer.py