2015-12-18 2 views
1

Я пытаюсь создать микросервис в Google App Engine, который не предназначен для обработки HTTP-запросов.Долгосрочный сценарий в Google App Engine

Вместо этого я надеялся, что будет постоянно работать сценарий Python, который контролирует удаленную очередь - RabbitMQ, если быть точным, - и отправляет api-вызов другой службе, поскольку задачи переносятся в очередь.

Мне было интересно, во-первых, можно ли запустить сценарий при развертывании - тот, который не возник из пользовательского действия/запроса?

Во-вторых, как бы я это сделал?

Заранее благодарим за ваше время!

+0

Что случилось с тем, что вы запускаете этот запрос после развертывания? Либо вручную, либо через работу cron? –

+0

@ AndreiVolgin, нет фатального дефекта для использования cron или что-то еще, но, учитывая точные требования OP, разве это более естественная архитектура, чтобы служить/_ah/start вместо этого? В конце концов, этот случай использования составляет примерно половину причины его существования (для ручных масштабированных модулей). –

+0

@Alex: запуск экземпляра ручного масштабирования - это «действие пользователя» тоже :) Мне нравится ваш ответ. –

ответ

3

Вы можете развернуть свой «скрипт» как модуль с масштабированием вручную - см. https://cloud.google.com/appengine/docs/python/modules/ - всего один экземпляр. Как говорят документы: «Когда вы запускаете экземпляр ручного масштабирования, App Engine немедленно отправляет запрос/_ah/start каждому экземпляру»; поэтому просто установите обработчик этого модуля для/_ah/start для обработчика, который вы хотите запустить (в файле yaml модуля и в приложении WSGI в коде Python, используя любые облегченные рамки, которые вам нравятся - webapp2, falcon, flask, bottle, или что-то еще ... фреймворк не сделает для вас многого, в этом случае сохраните одноразовую маршрутизацию).

Обратите внимание, что количество бесплатных рабочих часов для модулей ручного масштабирования ограничено 8 часами в день (для меньшего класса экземпляров B1, пропорционально меньше для более крупных классов экземпляров), поэтому вам может потребоваться перейти на платное приложение если вам нужно работать более 8 часов.

-1

Я думаю, что есть несколько проблем с этим дизайном.

Во-первых, App Engine разработан как процессор запросов HTTP, а не процессор сообщений RabbitMQ. GAE предназначен для многих небольших запросов, а не для одного длительного процесса.

Во-вторых, «RabbitMQ should not be exposed to the public internet, it wasn't created for such use case.»

Я рекомендую вам держать RabbitMQ клиентов на одной и той же внутренней сети в качестве RabbitMQ брокера, и есть клиенты отправлять HTTP запросы на App Engine.