IronMQ 不会为您处理您的任务;它只是作为 Celery 的后端来跟踪需要执行的工作。
所以,这就是发生的事情。假设你有两台服务器,你的 web 服务器和你的 Celery 服务器。您的 Web 服务器负责处理请求,您的 Celery 服务器创建缩略图并将其上传到 S3。下面是一个典型的请求:
- 您的用户将图像上传到您的网络服务器。
- 您将该图像存储在某个地方-我建议您将其放在 S3 上,个人,但您也可以将其存储在例如IronCache中,base64 编码。关键是把它放在你的 Celery 服务器可以访问的地方。
- 你在 Celery 上排队工作,将图像的位置传递给你的 Celery 服务器。
- 您的 Celery 服务器会下载图像、生成缩略图并将其上传到 S3。然后它将 S3 URL 存储在作业结果中。
- 您的 Web 服务器会等到作业完成,然后才能访问结果。或者,您可以让 Celery 服务器将结果存储在数据库本身中。关键是 Celery 服务器完成了繁重的工作(生成缩略图)并且在执行时不会阻止请求循环。
我写了一个在 Heroku 上使用 IronMQ 的例子。你可以在这里看到它:http: //iron-celery-demo.herokuapp.com。您可以在 Github 上查看示例的源代码并阅读教程,其中非常详尽地逐步解释了如何在 Heroku 上部署 Celery。
要清除 AMQP 的东西:
- IronMQ 是 Iron.io 开发的基于云的消息队列服务。
- AMQP 是一个开放的消息传递规范
- RabbitMQ 是 AMQP 规范最流行的实现(据我所知)。
- PyAMQP 是一个 Python 库,它允许 Python 客户端与 AMQP 的任何实现进行通信,包括 RabbitMQ
IronMQ 和 RabbitMQ/AMQP 之间的最大区别之一是 IronMQ 是托管和管理的,因此您不必自己托管服务器并担心正常运行时间。该规范在差异化方面提供了更多信息,并且存在潜在的差异,但 Celery 将其中的大部分抽象出来。因为您使用的是 Celery,所以您可能会注意到的唯一区别是 IronMQ 是托管的,因此您不必站起来管理自己的服务器。
全面披露:我受雇于 IronMQ 背后的公司 Iron.io。