【发布时间】:2014-11-26 09:21:32
【问题描述】:
我正在使用 celery 和 RabbitMQ 来运行一些任务,有时我需要将工作人员的消息返回给 RabbitMQ,所以我使用 pika。
我目前正在使用 BlockingConnection() 来连接到 RabbitMQ,但过了一会儿我得到一个异常“连接丢失”。
我相信这是因为 celery 是异步的,而且我正在使用 BlockingConnection()。
这是我的代码:
class RabbitConnection(object):
def __init__(self):
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
self.channel = self.connection.channel()
self.channel.queue_declare(queue=RABBITMQ_OUT_NAME, durable=True)
self.channel.confirm_delivery()
def add_alert(self, new_alert):
message = new_alert.to_json()
delivered = self.channel.basic_publish(exchange='',
routing_key=RABBITMQ_OUT_NAME,
body=message,
properties=pika.BasicProperties(
delivery_mode=2,
content_type='application/json',
))
我应该使用不同的连接吗?如果是,我应该如何使用它?
【问题讨论】:
-
这是多线程的吗? Pika 被限制为每个线程一个连接。你可以试试我自己的线程安全库github.com/eandersson/amqp-storm
-
听起来不错,能否根据我的代码给我一个简单的示例,如何实现您的线程安全库?
-
我发布了一些示例代码。如果我错过了什么,请告诉我,因为我没有时间测试代码。
-
了解一下,3年左右。但是,连接关闭发生在我身上,因为它正在尝试使用 IPv6 地址。因此,我尝试了 127.0.0.1,它成功了。