Rabbitmq Pika соединение часто отключается - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть следующий код:

import pika
import os
import eventlet
from eventlet.green import threading
pika = eventlet.import_patched('pika')
eventlet.monkey_patch()

#More Code

if __name__=='__main__'
   eventlet.spawn(pika_client)
   socketio.run(app, host='192.168.1.214')


def pika_client():
    global connection, channel
    params = pika.ConnectionParameters(heartbeat=500,
                                       blocked_connection_timeout=300)
    connection = pika.BlockingConnection(params)
    channel = connection.channel()
    return 1

Однако через 20-30 минут соединение pika будет отключено.

Любая помощь будет высоко оценена.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

В настоящее время я использую приведенный ниже код, и он, кажется, работает. Не могли бы вы сообщить мне, если это создаст проблему

try:
   pikaClient = socketio.start_background_task(pika_client)
   socketio.run(app, host='192.168.1.214')
except KeyboardInterrupt:
    pikaClient.join()


def pika_client():
    global connection, channel        
    params = pika.ConnectionParameters(heartbeat=600,
                                                    blocked_connection_timeout=300)
    connection = pika.BlockingConnection(params)
    channel = connection.channel()
    print('Connection created') 
    while True:
            time.sleep(650)
            try:
             connection.process_data_events()
            except pika.exceptions.StreamLostError:
                print("Will try to re-connect next.") 
                params = pika.ConnectionParameters(heartbeat=600,
                                                    blocked_connection_timeout=300)
                connection = pika.BlockingConnection(params)
                channel = connection.channel()
                print('Connection re-created')  
                #continue
            except KeyboardInterrupt:
                # Gracefully close the connection
                channel.close()
                connection.close()  
0 голосов
/ 17 апреля 2020

Пика BlockingConnection не совместима с eventlet исправлениями. Существует небольшая вероятность того, что SelectConnection будет работать, но он никогда не тестировался и не поддерживается.


ПРИМЕЧАНИЕ: команда RabbitMQ контролирует rabbitmq-users список рассылки и только иногда отвечает на вопросы в StackOverflow.

...