我正在尝试模拟一种情况,即我连接到消息队列,然后在网络出现故障(在我的情况下从VPN断开连接)之后,尝试在无限的while循环中重新连接到消息队列。
这是我的代码,似乎在按照我的意图运行,但是问题是,与VPN断开连接后,此过程仍保留在“ my_queue”上的使用者列表中,并在重新连接到VPN时创建了一个新使用者所以他们堆积。如何防止这种情况发生?
import pika
import time
def callback(ch, method, properties, body):
print("Message received.")
while True:
try:
cred = pika.PlainCredentials('my_user', 'my_pass')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.10.171', port=5672, virtual_host='/', credentials=cred, heartbeat_interval=20, socket_timeout=1))
channel = connection.channel()
channel.queue_declare(queue='my_queue', durable=True)
channel.basic_consume(callback, queue='my_queue', no_ack=True)
print('Connected.')
channel.start_consuming()
except:
print('Lost connection.')
time.sleep(2)
答案 0 :(得分:0)
问题是服务器上的心跳间隔设置为零,因此未检测到不活动的使用者。我使用的是pika版本0.11.0。似乎从服务器端提出了心跳的建议。