我想将图像上传到S3服务器,但在上传之前,我想生成3个不同大小的缩略图,我希望它能在请求/响应周期之外完成,因此我使用芹菜。我读了文档,这是我所理解的。如果我说错了,请纠正我。
- Celery帮助你管理请求响应周期之外的任务队列。
- 还有一个叫做carrot/kombu的东西——它是一个django中间件,用来打包通过芹菜创建的任务。
- 第三层PyAMQP,促进胡萝卜与经纪人的通信。如。RabbitMQ, AmazonSQS, ironMQ等
- Broker位于不同的服务器上,为您做事情。
现在我的理解是-如果多个用户同时上传图像,芹菜会排队调整大小,并且调整大小实际上会在ironMQ服务器上发生,因为它在heroku上提供了一个很酷的插件。
现在的疑问:
-
但是,在调整了图像大小之后,ironMQ会将其推送到S3服务器,还是会在过程完成后通知。
-
你能生动地解释一下芹菜和海带/胡萝卜的区别吗?
IronMQ不为您处理任务;它只是作为芹菜的后端来跟踪需要执行的任务。
是这样的。假设您有两台服务器,您的web服务器和您的芹菜服务器。您的web服务器负责处理请求,您的芹菜服务器创建缩略图并将其上传到S3。下面是一个典型的请求:
- 用户上传图片到web服务器。
- 你把图像存储在某个地方——我个人建议把它放在S3上,但你也可以把它存储在,例如IronCache, base64编码。关键是把它放在芹菜服务器可以访问的地方。
- 在芹菜上排队,将图像的位置传递给芹菜服务器。
- 芹菜服务器下载图像,生成缩略图,并将其上传到S3。然后,它将S3 url存储在作业结果中。
- 你的web服务器等待,直到任务完成,然后可以访问结果。或者,您可以让芹菜服务器将结果存储在数据库本身中。关键是,芹菜服务器完成了繁重的工作(生成缩略图),并且在此过程中不会占用请求循环。
我写了一个在Heroku上使用IronMQ的例子。你可以在这里看到:http://iron-celery-demo.herokuapp.com。您可以在Github上看到示例的源代码并阅读教程,该教程非常彻底地一步一步地解释了如何在Heroku上部署芹菜。
清理AMQP的东西:
- IronMQ是一个基于云的消息队列服务,由Iron.io开发。
- AMQP是一个开放的消息传递规范 RabbitMQ是AMQP规范最流行的实现(据我所知)。PyAMQP是一个Python库,允许Python客户端与任何AMQP实现进行通信,包括RabbitMQ
IronMQ和RabbitMQ/AMQP之间最大的区别之一是IronMQ是托管和管理的,所以你不必自己托管服务器,也不用担心正常运行时间。规范在区分方面提供了更多的内容,并且存在潜在的差异,但是芹菜将其中的大部分抽象掉了。因为您使用的是芹菜,所以您可能会注意到的唯一区别是IronMQ是托管的,因此您不必站起来管理自己的服务器。
全面披露:我受雇于Iron。
" IronMQ和RabbitMQ/AMQP之间最大的区别之一是IronMQ是托管和管理的,所以你不必自己托管服务器,也不用担心正常运行时间。"
目前至少有两个托管的RabbitMQ-as-a-service选项:Bigwig和CloudAMQP。芹菜在这两方面都很好。