Google App Engine上的长期运行脚本

时间:2015-12-18 23:38:48

标签: google-app-engine google-app-engine-python

我正在尝试在Google App Engine上创建一个微服务,旨在处理HTTP请求。

相反,我希望有一个持续运行的Python脚本来监控远程队列 - 确切地说是RabbitMQ - 并且当任务被推送到队列时向另一个服务发出api调用

我想知道,首先,是否可以在部署时运行脚本 - 一个不是源于用户操作/请求的脚本?

其次,我将如何实现这一目标?

提前感谢您的时间!

2 个答案:

答案 0 :(得分:3)

您可以将“脚本”部署为手动扩展模块 - 请参阅https://cloud.google.com/appengine/docs/python/modules/ - 只有一个实例。正如文档所说,“当您启动手动扩展实例时,App Engine会立即向每个实例发送/ _ah / start请求”;所以,只需将该模块的/ _ah / start处理程序设置为您要运行的处理程序(在模块的yaml文件和Python代码中的WSGI应用程序中,使用您喜欢的任何轻量级框架 - webapp2,falcon,flask,bottle,或者其他任何东西......在这种情况下,框架不会为你做太多的事情,除了一次性路由之外。

请注意,手动扩展模块的免费计算机小时数限制为每天8小时(对于较小的B1实例类;对于较大的实例类,按比例较少),因此您可能需要升级到付费应用状态如果你需要跑8个多小时。

答案 1 :(得分:-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代理保持在同一内部网络上,并让客户端向App Engine发送HTTP请求。