当前位置: 首页 > 工具软件 > python pika > 使用案例 >

python实时连接rabbitmq_Python-Pika连接rabbitmq(一)

呼延承平
2023-12-01

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')

 类似资料: