Хаки для интеграции с сельдереем Tornado

Поскольку никто не предоставил решение для этого сообщения , плюс тот факт, что мне отчаянно нужен обходной путь , вот моя ситуация и некоторые абстрактные решения / идеи для обсуждения.

Мой стек:

  1. Tornado
  2. Celery
  3. MongoDB
  4. Redis
  5. RabbitMQ

Моя проблема: найти способ для Tornado отправить задачу с сельдереем (решено), а затем асинхронно собрать результат (есть идеи?).

Сценарий 1: (взлом запроса / ответа плюс веб-перехватчик)

  • Tornado получает запрос (пользователя), затем сохраняет в локальной памяти (или в Redis) запрос {jobID: (user) request}, чтобы запомнить, куда передавать ответ и запускает задачу сельдерея с идентификатором задания
  • Когда сельдерей завершает задачу, он выполняет веб-перехватчик по некоторому URL-адресу и сообщает торнадо, что этот идентификатор задания завершен (плюс результаты)
  • Торнадо извлекает запрос (пользователя) и пересылает его ответ (пользователю)

Может такое случиться? Есть ли в нем какая-то логика?

Сценарий 2: (торнадо плюс длинный опрос)

  • Торнадо отправляет задачу сельдерея и возвращает некоторые первичные данные json клиенту (jQuery)
  • jQuery выполняет длинный опрос при получении основного json, скажем, каждые x микросекунд, и торнадо отвечает в соответствии с некоторым флагом базы данных. Когда задача с сельдереем завершается, этот флаг базы данных устанавливается в True, тогда "цикл" jQuery завершается.

Это эффективно?

Есть другие идеи / схемы?

12
задан Community 23 May 2017 в 12:15
поделиться