Процесс остается в списке потребителей сервера RabbitMQ после сбоя сети - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь смоделировать сценарий, в котором я подключаюсь к очереди сообщений, а затем после сбоя сети (в моем случае отключения от 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 голосов
/ 06 июня 2019

Проблема заключалась в том, что интервал пульса на сервере был установлен на ноль, поэтому неактивные потребители не обнаруживались.Я использовал версию Пика 0.11.0.который, казалось бы, принял предложение сердцебиения со стороны сервера.

...