我的系统架构看起来与此处问题中发布的图非常相似。我的实现和发布的问题之间的主要区别在于,我将使用 fastapi/flask 作为 web 服务器(在 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 服务器需要通知客户端在一段时间后返回并检查结果(然后返回建议)。
一旦 web 服务器通过 rabbitmq 发布消息,worker 将根据消息生成相关建议(通过查找数据库)。该消息连同 uuid 将被发送回另一个 rabbitmq 消息队列。现在 Web 服务器成为消费者。
问题 2:假设 webserver 在出口路径上注册为消息队列的消费者,webserver 是否会在消息队列的单独线程上获取数据?
问题 3:客户端和服务器可以通过web-sockets异步通信,而不是等待客户端的另一个 HTTP 请求发送建议?