Одновременно получать логи от Rabbitmq и запускать приложение фляги

У меня Rabbitmq установлен и работает должным образом, и я знаю, как получать журналы, но не знаю, как показать его с помощью колбы.

flask_app.py

from flask import Flask
from threading import Thread
app = Flask(__name__)
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.exchange_declare(exchange='logs',
                     type='fanout')

result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

channel.queue_bind(exchange='logs',
               queue=queue_name)

print('[*] Waiting for logs. To exit press CTRL+C')
def callback(ch, method, properties, body):
    print(body)

channel.basic_consume(callback,
                      queue=queue_name,
                      no_ack=True)

thread = Thread(channel.start_consuming())
thread.start()

@app.route('/')
def index():
    return 'hi'

Я не знаю, как использовать многопоточность для запуска приложения фляги и непрерывного получения журналов из очереди.

0 ответов

Ваше приложение flask, здесь основной поток, выполняется в течение определенного времени или количества запросов, определяемых вашим uwsgi или чем-то еще, что вы используете для его запуска. Когда основной процесс останавливается, скорее всего, сейчас неподходящее время для корректного закрытия соединения amqp.

Более того, одновременно может быть запущено более одного экземпляра вашего приложения (подумайте о uwsgi processes), поэтому вы получите биты журналов для каждого рабочего / процесса.

Разумный подход здесь - разделить эти две вещи. Запустите потребительский процесс для ваших журналов за пределами вашего веб-приложения, то есть: с супервизором.

Другие вопросы по тегам