【问题标题】:Listening for RabbitMQ and running flask on same server监听 RabbitMQ 并在同一台服务器上运行烧瓶
【发布时间】:2020-05-13 20:54:42
【问题描述】:

我有一个这样的 Flask 应用程序

from flask import Flask
from flask_restful import Resource, Api
from mq_handler import MessageBroker
import pika

app = Flask(__name__)
api = Api(app)
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
mb = MessageBroker(connection)



class HelloWorld(Resource):
    def get(self):
        mb.run()
        return {'hello': 'world'}


class LogHandler(Resource):
    def get(self, table):
        return {'TableName': table}




api.add_resource(HelloWorld, '/')
api.add_resource(LogHandler, '/log/<string:table>')



if __name__ == '__main__':
    app.run(debug=True)

我添加了一个 MessageBroker 类来处理我所有的 rabbitMq 消息

import pika
import json


class MessageBroker:
    def __init__(self, connection):
        self.connection = connection
        self.channel = connection.channel()

    def run(self):
        self.channel.start_consuming()
        self.channel.basic_consume(queue='logs',
                              auto_ack=True,
                              on_message_callback=self.handle_log)
        self.channel.start_consuming()

    def handle_log(self, ch, method, properties, body):
        decoded_content = body.decode('utf-8')
        json_payload = json.loads(decoded_content)
        print(" [x] Received %r" % json_payload['message'])

我尝试了不同的解决方案,但我可以让两个服务在同一台服务器上同时运行吗?有人可以解释一下吗?

一般来说.. 如何在我的烧瓶服务器上运行多个服务?

【问题讨论】:

    标签: python flask rabbitmq


    【解决方案1】:

    我不确定在端点上运行消费者是否是个好主意。因为,当您启动消费者时,它会运行一个 IO 循环来不断地从服务器获取和处理消息。除非在外部完成或消息处理中的任何异常导致连接关闭,否则循环不会退出。您能否说明您在端点中运行消费者的方案?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2019-05-13
      相关资源
      最近更新 更多