网络故障后,进程仍保留在RabbitMQ服务器使用者列表中

时间:2019-06-05 21:40:42

标签: rabbitmq pika

我正在尝试模拟一种情况,即我连接到消息队列,然后在网络出现故障(在我的情况下从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)

这是服务器上的外观。实际上只有最后一个使用者处于活动状态,但是消息正在分发给每个使用者。 Consumer list on 'my_queue'

1 个答案:

答案 0 :(得分:0)

问题是服务器上的心跳间隔设置为零,因此未检测到不活动的使用者。我使用的是pika版本0.11.0。似乎从服务器端提出了心跳的建议。