Python 在我用皮卡语创建永久出版商时遇到问题
我有一个Django网站,我希望来自它的请求总是发布到RabbitMQ。为此,我使用PikaPython 在我用皮卡语创建永久出版商时遇到问题,python,django,rabbitmq,pika,Python,Django,Rabbitmq,Pika,我有一个Django网站,我希望来自它的请求总是发布到RabbitMQ。为此,我使用PikaBlockingConnection,并始终保持连接打开,以使用basic\u publish发布网站请求,但当连接有点过时时,每当我发布新消息时,我会遇到以下异常 pika.exceptions.StreamLostError: Stream connection lost: BrokenPipeError(32, 'Broken pipe') 这是我用来管理连接的代码 class Connectio
BlockingConnection
,并始终保持连接打开,以使用basic\u publish
发布网站请求,但当连接有点过时时,每当我发布新消息时,我会遇到以下异常
pika.exceptions.StreamLostError: Stream connection lost: BrokenPipeError(32, 'Broken pipe')
这是我用来管理连接的代码
class ConnectionManager():
connection = None
def get_connection(self):
if(self.connection and self.connection.is_open):
return self.connection
params = pika.URLParameters('amqp://guest:guest@rabbit-server1:5672/%2F')
self.connection = pika.BlockingConnection(params)
return self.connection
def get_channel(self, queue_name):
if(self.channel and
self.channel.is_open and
self.connection.is_open):
return channel
self.channel = self.get_connection().channel()
self.channel.queue_declare(queue=queue_name, durable = True)
return self.channel
以及出版:
publisher = ConnectionManager()
def publish_message(request_message):
publisher.get_channel("queue").basic_publish(exchange='',
routing_key="some_key",
body=json.dumps(request_message),
properties=pika.BasicProperties(
delivery_mode = 2,
))
我如何维护一个永久运行的连接来满足我的目的?RabbitMQ可能会在您遇到异常时记录一些有用的信息。记录了什么?
2020-09-25 13:34:55.019[错误]关闭AMQP连接(127.0.0.1:52240->127.0.0.1:5672):错过了来自客户端的心跳,超时:60s
这是日志中的错误。我是否要将heartbeat参数添加到连接字符串中,并给它一个小于60s的值?请使用术语pika block I/O loop
进行搜索。您的代码阻止Pika发送心跳。谢谢。我搜索了日志,但没有任何关于pika块I/O循环的内容。也只搜索了块
,但找不到日志项。@LukeBakken您能建议一种方法使我的连接持久并避免管道破裂异常吗?