7

我已经安装了 rabbitmq 并且工作正常,我知道如何接收日志,但不知道如何使用烧瓶将其显示给 UI。

烧瓶应用程序.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'

我不知道如何使用多线程来运行烧瓶应用程序并不断从队列中接收日志。

4

1 回答 1

1

你的烧瓶应用程序,这里是主线程,运行一段时间或由你的 uwsgi 或你用来运行它的任何其他东西确定的请求数量。当主进程停止时,很可能是优雅地关闭 amqp 连接的错误时间。

此外,您的应用程序可能同时运行多个实例(想想 uwsgi processes),因此您会在每个工作进程/进程上获得一些日志。

明智的做法是将这两件事分开。为您的 Web 应用程序范围之外的日志运行消费者进程,即:使用 supervisord。

于 2019-10-07T10:02:08.227 回答