Pika介绍:Pika是一个纯Python的实现了AMQP0-9-1协议的保持独立的网络包。
安装Pika命令:
pip install pika; or easy_install pika.
当然也可以通过在源代码的根目录下采用:
python setup.py install
进行安装。
1、IO and Event Looping:
AMQP是一个双向的RPC协议,服务端和客户端可以互相发送请求。Pika通过异步连接适配器(adapters)实现或者扩展了IO loops。这些IO loops通过blocking 方式来完成loop和时间监听。每隔异步的适配器遵循同样的标准用来唤醒(invoking) IO loop。IO loop在连接适配器时进行创建。可以通过connection.ioloop.start()方法开启任意一个IO loop适配器。
如果使用的是外部的IO loop,比如:Tornado‘s IOLoop,则必须通过唤醒并添加到Pika Tornado适配器。实例如下:
import pika
def on_open(connection):
# Invoked when the connection is open.
pass
connection = pika.SelectConnection(on_open_callback=on_open)
try:
# Loop so we can communicate with RabbitMQ
connection.ioloop.start()
except KeyBoardInterrupt:
connection.close()
connection.ioloop.start()
Pika的异步接口可以通过传递一个回调函数(callback methods)来唤醒特定的时间。比如:如果声明了一个队列,当RabbitMQ服务返回一个Queue.DeclareOk时,会将此内容传递到一个方法中。
在接下来的例子中,均采用下面的五个步骤:首先创建一个链接对象,然后开始我们的时间循环。
当链接创建的时候,on_connected方法会被调用,在该方法中,创建了一个channel。
当channel创建后,on_channel_open方法被调用,在该方法中,会声明一个队列。
当queue被成功创建后,on_queue_declared函数被调用,在该方法中通过channel.basic_consume告诉每个通过RabbitMQ传递过来的函数句柄。
当RabbitMQ有一个消息传递过来的时候,通过调用句柄函数来传递AMQP方法的Frame,Header Frame,和Body。
例子:
import pika
channel = None
def on_connected(connection):
connection.channel(on_open_callback=on_channel_open)
def on_channel_open(new_channel):
global channel
channel = new_channel
channel.queue_declare(queue='test', durable=True, exclusive=False, auto_delete=False, callback=on_queue_declared)
def on_queue_declared(frame):
channel.basic_consume('test', handle_delivery)
def handle_delivery(channel, method, header, body):
print(body)
parameters = pika.ConnectionParameters()
connection = pika.SelectionConnection(parameters, on_open_callback=on_connected)
try:
connection.ioloop.start()
except KeyboardInterrupt:
connection.close()
connection.ioloop.start()
2、Credentials
pika.credentials模块提供了一种机制让我们在ConnectionParameters类创建时,传递用户名和密码。
例子:
import pika
crenditials = pika.PlainCredentials('username', 'password')
parameters = pika.ConnectionParameters(credentials=crenditials)
3、Connection Parameters
Pika允许通过两种方式来连接适配器来传递参数,分别是:ConnectionParameters 和URLParameters。
例子:
import pika
parameters = pika.URLParameters('amqp://guest:guest@rabbit-server1:5672/%2F?backpressure_detection=t')