簡體   English   中英

監聽 RabbitMQ 並在同一台服務器上運行 flask

[英]Listening for RabbitMQ and running flask on same server

我有一個 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 class 來處理我所有的 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'])

我嘗試了不同的解決方案,但我可以讓這兩種服務在同一台服務器上同時運行嗎? 有人可以解釋一下嗎?

一般來說..如何在我的 flask 服務器上運行多個服務?

我不確定在端點上運行消費者是否是個好主意。 因為,當你啟動一個消費者時,它會運行一個 IO 循環來不斷地從服務器獲取和處理消息。 除非在外部完成或消息處理中的任何異常導致連接關閉,否則循環不會退出。 您能否請 state 您的場景在端點運行消費者?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM