Так получилось, что мне одному надо разработать "асинхронное API". Поясню, что я вкладываю в термин "асинхронное API", общая архитектура такова:
Есть листенер, который принимает http запросы к API, на основе запроса составляется сообщение которое отправляется на AQMP брокер. Есть воркеры, которые забирают сообщение из очереди (AMQP) и выполняют какие-то действия, которые указанны в полученном сообщении. Выполнение запросов могут занимать продолжительное время. Результатом работы могут быть XML или JSON данные (в некоторых, очень редких, случаях это может быть PDF\RTF). Пользователь делает запрос, ему отдается Task ID. Далее пользователь, с какой-то периодичностью, проверяет статус этой задачи (делает Get запрос, например на адрес
host/api/task/123-1213-12121-121212).
Собственно сам вопрос, каким образом можно хранить и возвращать результат работы?
Я вижу несколько решений:
1) Результат работы помещается в таблицу БД. Таблица, например, из 3 полей - taskID, result, time (в time хранить время записи результат в таблицу, что бы удалять, например, спустя 48 часов. )
2) Результат работы помещать в другу. очередь на AMQP брокере. Но как потом отдавать? Как идентифицировать конкретное сообщение в очереди без перебора всех?
3) Еще какой-то вариант до которого я еще не додумался.
Буду очень рад за советы (по абсолютно любым пунктам). Если интересуют конкретные технологии то вот:
1) Листенер - python + bottle + pika
2) Воркеры - python + pika + много чего =)
3) В качестве базы Postgresql
Очень надеюсь на вашу помощь, т.к. посоветоваться не с кем. Этот проект затеян для самообразования.