gpt4 book ai didi

python - RabbitMQ、Flask/fastapi 和 websockets

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:54 26 4
gpt4 key购买 nike

我的系统架构看起来与问题 here 中发布的图非常相似。我的实现和发布的问题之间的主要区别在于,我将使用 fastapi/flask 作为网络服务器(在 python 中),并使用rabbitmq 来进行消息传递。

我的高级伪代码(使用fastAPI)如下:

from fastapi import APIRouter
from starlette.responses import Response
router = APIRouter()

@router.post("/users/{message}")
async def provide_suggestions(message: str, response: Response):
uuid = generate_uuid(message)
message_dict = {"uuid": uuid, "data": message}.
result = await post_message_to_rabbit_mq(message_dict)
response.status_code = SOME_VALID_HTTP_RESPONSE_CODE # what would this be?

问题 1:HTTP 响应代码是什么?基本上,Web 服务器需要通知客户端在一段时间后返回并检查结果(然后返回建议)。

一旦网络服务器通过rabbitmq发布消息,工作人员就会根据消息生成相关建议(通过查找数据库)。该消息与 uuid 一起将被回发到另一个rabbitmq消息队列中。现在网络服务器变成了消费者。

问题 2:假设 Web 服务器在导出路径上注册为消息队列的使用者,Web 服务器是否会在消息队列的单独线程上获取数据?

问题3:客户端和服务器可以通过 web-sockets 异步通信,而不是等待客户端的另一个 HTTP 请求发送建议。 ?

最佳答案

回答您的问题:

1:根据REST standards ,状态代码 202 似乎在这里执行此操作:

HTTP Status 202 indicates that request has been accepted for processing, but the processing has not been completed. This status code is useful when the actual operation is asynchronous in nature.

2:您可能希望服务内有一个不同的进程来使用队列并更新本地服务器数据库。这通常不是 fastapi Web 服务器的一部分,而是一个单独的进程。然后,您的 fastapi Web 服务器可以经常查询本地数据库,或者您可以在 Web 服务器上有一个单独的端点,当数据库更新时,该进程可以调用该端点。

3:如果您有可以处理 websocket 连接的客户端实用程序,那么可以。请参阅 fastapi 的文档 here 。否则,最好在第一个请求时返回状态代码 202,并让客户端每隔几秒查询一次网络服务器。另一种选择是使用回调 url,但这取决于客户端的情况。

关于python - RabbitMQ、Flask/fastapi 和 websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59782884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com