python - Python Redis Stream 等到收到消息
问题描述
目前正在从事一个涉及 Python Flask 和 Redis 的项目。我想使用 Redis 流来获取用户输入并将它们发送到后端微服务进行处理。然后结果将通过流返回到要显示的烧瓶应用程序。
似乎 Python 有三个与 redis 兼容的模块。Redis-Py
, ReJSON
, 和Walrus
. 三者Walrus
中的文档最好,但不支持 JSON,ReJSON
支持 JSON,但不支持 Streams。
目前,Redis 数据库在启用了 RedisJSON 模块的 docker 中运行。
烧瓶应用程序
from walrus import *
from flask import Flask, request
from flask_restful import Resource, Api, reqparse
app = Flask(__name__)
api = Api(app)
db = Walrus(host=`redis-api`, port=6379, password='testpassword', db=0)
stream = db.Stream('stream-one')
class siteAPI_GP(Resource):
# Returns existing Queries
def get(self):
queries = db.get('queryDB').decode('utf-8')
return {'message': 'Success', 'data': queries}, 200
# Adds new Query
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('identifier', required=True)
parser.add_argument('query', required=True)
args = parser.parse_args()
# Here I would like to add the variable args to stream-one
msgid1 = stream.add({'message': args})
return {'message': 'Query Recieved', 'data': args}, 201
# Create routes
api.add_resource(siteAPI_GP, "/query")
后端.py
from walrus import *
redis_host = "redis-api"
redis_port = 6379
redis_password = "Password:)"
# Connet to DB
db = Walrus(host=redis_host, port=redis_port, password=redis_password, db=0)
# Connect to Stream
stream = db.Stream('stream-one')
backend.py
这是脚本连接到流后我希望发生的一些伪代码。这样做的最佳方法是什么?
for message-received in stream-one:
execute some code
else
print "still waiting for message"
我目前正在考虑Walrus
在所有 Python 脚本中使用这些模块,除了flaskapp.py
我将同时使用它们ReJSON
并Walrus
提供流和 json 功能的地方。
非常感谢所有帮助!
解决方案
推荐阅读
- dart - 如果不包含对象,则将对象添加到列表中
- javascript - 无法使用 RN 中的对象数组更新状态
- python - 在 sphinx-apidoc 生成的文件中包含 __main__.py
- reactjs - React 反复运行函数,但我没有调用它
- image - 第 11 张图像永远无法被读者识别
- matrix - 平面上四元数的胫骨角,欧拉角
- php - 查询 - 从字段结果中排除前缀
- javascript - 图像高度超过带有附加元素的容器
- oauth-2.0 - 身份服务器 4 和 OAuth2
- material-ui - DatePicker (material-ui-picker) onChange 无法将值传递给 redux-form onChange 事件