Архитектура моей системы очень похожа на рисунок, приведенный в вопросе здесь . Основное различие между моей реализацией и опубликованным вопросом заключается в том, что я буду использовать 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? По сути, веб-сервер должен уведомить клиента, чтобы он вернулся через определенное время, и проверить результат (и затем вернуть предложения).
Как только веб-сервер отправляет сообщение через rabbitmq, рабочие генерируют соответствующие предложения на основе сообщения (путем поиска в базе данных). Это сообщение вместе с uuid будет отправлено обратно в другую очередь сообщений rabbitmq. Теперь веб-сервер становится потребителем.
Вопрос 2: Предполагая, что веб-сервер зарегистрирован в качестве потребителя для очереди сообщений на выходном пути, получит ли веб-сервер данные в отдельном потоке для очереди сообщений?
Вопрос 3: вместо ожидания другого HTTP-запроса от клиента на отправку предложений, может ли клиент и сервер асинхронно взаимодействовать через веб-сокеты ?