python - 监听 RabbitMQ 并在同一台服务器上运行烧瓶
问题描述
我有一个这样的 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'])
我尝试了不同的解决方案,但我可以让这两种服务在同一台服务器上同时运行吗?有人可以解释一下吗?
一般来说..如何在我的烧瓶服务器上运行多个服务?
解决方案
我不确定在端点上运行消费者是否是个好主意。因为,当您启动消费者时,它会运行一个 IO 循环来不断地从服务器获取和处理消息。除非在外部完成或消息处理中的任何异常导致连接关闭,否则循环不会退出。您能否说明您在端点中运行消费者的方案?
推荐阅读
- javascript - 根据另一个对象对对象进行排序
- angular - 动态加载捆绑包时 SystemJS 未在 Safari 中发送 cookie
- swift - 删除 podfile.lock 并运行 pod install 后 Xcode 出错
- mongodb - 在 NestJs 中创建集合后如何使用猫鼬保存对象
- grep - 遍历 *.gz 文件并返回内容不包含字符串的位置
- android - Flutter 父框装饰图片重叠子框装饰
- sql - 具有默认值的 SQL Select 语句
- html - Microsoft Teams 频道中的 HTML 邮件以原始格式显示,而不是正确的格式
- c# - 使用while循环C#乘以表
- python - 如何从 PYTHON 列表中包含的不同列表中添加两个数字