首页 > 解决方案 > 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我将同时使用它们ReJSONWalrus提供流和 json 功能的地方。

非常感谢所有帮助!

标签: pythonpython-3.xredis

解决方案


推荐阅读